Terminal
使用附加的日期和時間戳批量重命名多個文件
我需要一種自動的方法來在這樣的某個目錄中的所有 .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:看最後一行,是一個子目錄。