這裏是一個純巴什解決方案:
find "$WORKDIR" -type f -name '*.zip' | while read file
do
basename=$(basename "$file")
dirname=$(dirname "$file")
suffix=$(basename "$dirname")
if [[ "$basename" != *"_${suffix}.zip" ]]; then
mv -v "$file" "${dirname}/${basename%.zip}_${suffix}.zip"
fi
done
腳本處理的$WORKDIR
發現循環中的所有*.zip
文件。在循環中,它檢查$file
是否已經有一個與父目錄名稱相同的後綴。如果它沒有這樣的後綴,那麼腳本會將該文件重命名爲"_{parent_directory_name}"
,並將其重命名爲擴展名之前的文件名。
樣品樹
A
├── B
│ ├── abc.zip.zip
│ └── C
│ └── file_C.zip
└── one.zip
樣本輸出
‘./t/A/one.zip’ -> ‘./t/A/one_A.zip’
‘./t/A/B/abc.zip.zip’ -> ‘./t/A/B/abc.zip_B.zip’
A
├── B
│ ├── abc.zip_B.zip
│ └── C
│ └── file_C.zip
└── one_A.zip
其中WORKDIR=./t
。
請注意,我故意簡化了find
命令,因爲它對算法並不重要。您可以根據需要調整選項。