[英]Renaming Files Through Script
我有一些文件名不正確(擴展名末尾添加了兩次)。 我試圖編寫一個bash腳本,該腳本將掃描目錄並重命名它們,但是會引發以下錯誤:
無法將“ /var/random/file/file1.avi.mp4”移動到“ {/var/random/file/file1.avi.mp4%.avi.mp4}.mp4”:沒有這樣的文件或目錄
我只想適當地重命名文件擴展名,並且不確定該錯誤在哪里起作用。 例如,上述錯誤的文件擴展名應為.mp4。 以下是我的劇本,如果有人可以提供幫助,我將無所適從...
#/bin/sh
for file in $(find /var/random/ -type f -name "*.avi.mp4"); do
mv "$file" "{$file%.avi.mp4}.mp4"
done
您的變量擴展中有一個錯字:
"{$file%.avi.mp4}.mp4"
本來應該:
"${file%.avi.mp4}.mp4"
但是,您可能想看看重rename
( perl-rename
)
perl-rename 's/[^.]+\.(?=[^.]+$)//' /var/random/*/*.avi.mp4
正則表達式將刪除文件名中倒數第二個擴展名:
/path/to/file/foo.bar.baz -> /path/to/file/foo.baz
find . -type f -name "*.avi.mp4" -print0 | while read -rd '' filename
do
if [ -e "${filename%.avi.mp4}.mp4" ]
then
mv --backup "${filename}" "${filename%.avi.mp4}.mp4"
#doing the backup only if the destination file exists to save space.
else
mv "${filename}" "${filename%.avi.mp4}.mp4"
fi
done
這里發生了什么 :
find
所有擴展名為.avi.mp4
的文件。 print0
該選項的find
。 -d
中的選項read
為null( ''
)命令,我們分析每個空終止的文件名。 .avi.mp4
,並在mv
階段將.mp4
附加到每個文件。 參見參考文獻1。 參考文獻:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.