Terminal

使用附加的日期和時間戳批量重命名多個文件

  • November 25, 2016

我需要一種自動的方法來在這樣的某個目錄中的所有 .pdf 文件上添加創建的日期和時間戳;testfile.pdf需要是testfile-YYY.MM.DD_HH.MM.SS.pdf 我使用 OSX 終端。

我有這個程式碼:

   cd "/Users/***/Documents/testmapa"
old_filename=""testfile.pdf"
new_filename=${old_filename%.*}$(stat -f %SB -t "%Y%m%d_%H%M%S" "$old_filename").${old_filename##*.}
mv "$old_filename" "$new_filename"

這可以完成工作,但是在一個文件上,我如何將其應用於某個目錄中的所有 pdf 文件。基本上我需要一個文件,它會“點擊”執行一些程式碼,並將這個創建的日期添加到文件被點擊的目錄中所有 .pdf 文件的文件名中。還有一個問題,該程式碼可以在子文件夾上執行嗎?我已經安裝了perl,但不知道如何使用它。我只知道它有 rename 函式和 ctime stat,但我不知道如何編寫該程式碼。

像這樣的工作對我來說沒問題:

for files in /home/gv/Desktop/PythonTests/*.sh; do
old_filename=$files
old_filename_stripped=$(basename -a $files)
echo "filename full : $old_filename - file name stripped: $old_filename_stripped"
done

輸出:

filename full : /home/gv/Desktop/PythonTests/advfind2.sh - file name stripped: advfind2.sh
filename full : /home/gv/Desktop/PythonTests/advfind.sh - file name stripped: advfind.sh
filename full : /home/gv/Desktop/PythonTests/appslist(draft).sh - file name stripped: appslist(draft).sh
filename full : /home/gv/Desktop/PythonTests/appslist.sh - file name stripped: appslist.sh

改進的程式碼包括空格和子目錄:

IFS=$'\n'
for files in $(find /home/gv/Desktop/PythonTests/ -name "*.txt" ); do
old_filename="$files"
old_filename_stripped=$(basename -a "$files")
echo "filename full : $old_filename - file name stripped: $old_filename_stripped"
done
unset IFS

輸出:

filename full : /home/gv/Desktop/PythonTests/b.txt - file name stripped: b.txt
filename full : /home/gv/Desktop/PythonTests/c.txt - file name stripped: c.txt
filename full : /home/gv/Desktop/PythonTests/a ver 1.txt - file name stripped: a ver 1.txt
filename full : /home/gv/Desktop/PythonTests/d.txt - file name stripped: d.txt
filename full : /home/gv/Desktop/PythonTests/a.txt - file name stripped: a.txt
filename full : /home/gv/Desktop/PythonTests/appsfiles/a.txt - file name stripped: a.txt

PS:看最後一行,是一個子目錄。

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