使用完整路徑重新命名檔案(前綴)?

使用完整路徑重新命名檔案(前綴)?

我想為我的文件添加前綴(.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

對目前腳本的兩處變更:

  1. 解析ls;相反依賴關於 shell 的通配符

  2. 因為檔案位於子目錄中,所以要么cd先在子目錄中運行循環,要么在添加前綴之前使用basenamedirname提取檔案的目錄和檔案名稱部分。

(注意:我還將您的“/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

相關內容