Shell

用完整路徑重命名文件(前綴)?

  • June 22, 2016

我想像這樣為我的文件(.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. 不要解析 ls而是依賴於 shell 的 globbing
  2. 因為文件在子目錄中,要麼cd先在那裡執行循環,要麼在添加前綴之前使用basenameanddirname拉出文件的目錄和文件名部分。

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

引用自:https://unix.stackexchange.com/questions/291413