フルパス(プレフィックス)にファイル名を変更しますか?

フルパス(プレフィックス)にファイル名を変更しますか?

次のようにファイルにプレフィックス()を追加したいと思います.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つの変更点:

  1. いいえlsを解析する;逆依存性シェルワイルドカード情報

  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

おすすめ記事