web-dev-qa-db-ja.com

Linuxでファイル名に日付を追加する

ファイル名(「somefile.txt」)の横に日付を追加します。例:somefile_25-11-2009.txtまたはsomefile_25Nov2009.txtまたはその他の効果

おそらく、スクリプトが実行するか、ターミナルウィンドウで何らかのコマンドが実行されます。 Linux(Ubuntu)を使用しています。

前もって感謝します。

ああ、スクリプトまたはコマンドは、ファイルを特定のフォルダーに保存するたびにファイル名を新しい日付に更新するが、以前のファイルを保持することを追加するのを忘れていました。そのため、最終的に次のようなファイルがフォルダーにあります:filename_18Oct2009.txt、filename_9Nov2009.txt、filename_23Nov2009.txt

25
sami

ここには2つの問題があります。

1。日付を文字列として取得します

これは非常に簡単です。 dateコマンドと+オプションを使用するだけです。バックティックを使用して、変数の値をキャプチャできます。

$ DATE=`date +%d-%m-%y` 

date man page で説明されているように、さまざまな%オプションを使用して日付形式を変更できます。

2。ファイルを名前と拡張子に分割します

これは少し複雑です。ファイル名に.が1つしかないと思う場合は、.を区切り文字としてcutを使用できます。

$ NAME=`echo $FILE | cut -d. -f1
$ EXT=`echo $FILE | cut -d. -f2`

ただし、ファイル名に複数の.が含まれる場合は機能しません。 bashを使用している場合-おそらく-いくつかの 変数展開を行うときにパターンを一致させることができるbashマジック

$ NAME=${FILE%.*}
$ EXT=${FILE#*.} 

それらをまとめると、次のようになります。

$ FILE=somefile.txt             
$ NAME=${FILE%.*}
$ EXT=${FILE#*.} 
$ DATE=`date +%d-%m-%y`         
$ NEWFILE=${NAME}_${DATE}.${EXT}
$ echo $NEWFILE                 
somefile_25-11-09.txt                         

そして、読みやすさをあまり気にしないのであれば、すべての作業を1行で(異なる日付形式で)行います。

$ FILE=somefile.txt  
$ FILE=${FILE%.*}_`date +%d%b%y`.${FILE#*.}
$ echo $FILE                                 
somefile_25Nov09.txt
37
Dave Webb

バックティックを使用できます。

$ echo "myfilename-"`date +"%d-%m-%Y"`

利回り:

myfilename-25-11-2009
31
miku
cp somefile somefile_`date +%d%b%Y`
15
Soufiane Hassou

仕様に完全に一致するもう少し複雑なソリューション

echo `expr $FILENAME : '\(.*\)\.[^.]*'`_`date +%d-%m-%y`.`expr $FILENAME : '.*\.\([^.]*\)'`

最初の 'expr'は拡張子なしのファイル名を抽出し、2番目の 'expr'は拡張子を抽出します

0
catwalk