次のようにファイルにプレフィックス()を追加したいと思います.dat
。
CLY_BIZ_COM_PERD.dat -> 20160622CLY_BIZ_COM_PERD.dat
私は以下を試しました:
key=`date "+%Y%m%d"`
for i in $(ls /Path/*.dat); do mv ${i} "${key}${i}" ;done
しかし、このコマンドはサフィックスプレフィックスの代わりに私のファイル。どうすればいいですか?
答え1
現在のスクリプトに対する2つの変更点:
ファイルはサブディレクトリにあるため、
cd
まずサブディレクトリでループを実行するか、プレフィックスを追加する前にファイルのディレクトリとファイル名部分を使用しbasename
て抽出します。dirname
(注:ルートレベル/ Pathディレクトリを作成したくなかったため、「/ Path」も「. / Path」に変更しましたが、同じ原則が適用されます。
いくつかのサンプルファイルを設定します。
mkdir Path && cd Path
touch CLY_BIZ_COM_PERD.dat jeff.dat a.dat c\ d.dat
cd ..
練習は次のとおりです。
for f in ./Path/*.dat
do
printf "mv '%s' '%s'\n" "$f" "$(dirname "$f")/${key}$(basename "$f")"
done
テスト実行結果:
mv './Path/a.dat' './Path/20160622a.dat'
mv './Path/c d.dat' './Path/20160622c d.dat'
mv './Path/CLY_BIZ_COM_PERD.dat' './Path/20160622CLY_BIZ_COM_PERD.dat'
mv './Path/jeff.dat' './Path/20160622jeff.dat'
満足している場合は、次のことを続けてください。
for f in ./Path/*.dat
do
mv "$f" "$(dirname "$f")/${key}$(basename "$f")"
done
...結果:
$ ls -1 Path
20160622a.dat
20160622c d.dat
20160622CLY_BIZ_COM_PERD.dat
20160622jeff.dat