
我有帶有破折號的子資料夾(例如名稱為 cd 的子目錄)。我需要重命名所有子目錄中的所有 .jpg 檔案。有什麼技巧可以做嗎?我嘗試了很多選項,但沒有任何幫助(我想是因為我的子資料夾包含破折號 -)謝謝大家! :)
我努力了
find -name '*.jpg' -exec rename $RANDOM.jpg $RANDOM.jpg {} \;
但得到
(Missing operator before jpg?) syntax error at (user-supplied code)
line 3, near "2635.jpg" Bareword found where operator expected at
(eval 4) line 1, near "#line 1 2635.jpg"
答案1
沒有重命名的情況,因為你可能只是用 mv 來做。
find -name '*.jpg' -exec bash -c 'mv -i "{}" "$RANDOM.jpg"' \;
mv -i 表示互動式。它在覆蓋之前詢問。
這不是深入的測試,只是臨時的,以確保檔案將獲得不同的名稱。更多的測試是:
find -name '*.jpg' -exec echo bash -c 'mv -i "{}" "$RANDOM.jpg"' \;
但是,這會將所有文件放入目前目錄。也許使用 -execdir 是選項?
find -name '*.jpg' -execdir bash -c 'mv -i "{}" "$RANDOM.jpg"' \;
不過,請做好備份,注意資料等。帶有 find 的大規模行動是一個鋒利的工具。我不承擔任何責任。
AFAIK dashes 在這場比賽中沒有馬。
答案2
你不清楚的是如何您想要重新命名檔案。據,直到...為止哪個要重新命名的文件,您可以find
根據所需的包含破折號的模式來匹配所有文件:
find [PATH...] -type f -name '*-*' | prename EXPR
如果您也想匹配目錄,則需要使用以下-depth
選項:
find [PATH...] -depth -name '*-*' | prename EXPR
答案3
我剛剛在名稱中帶有破折號的子資料夾上嘗試過此操作,並且它有效。
在 Linux/Ubuntu 中重複重命名部分檔名
若要重新命名文件,您可以使用尋找命令與改名像這樣的命令:
find -type f -execdir rename 's/OriginalText/NewText/' *.jpg '{}' \;
因此,如果您想用下劃線“_”替換所有 jpg 檔案名稱中的所有破折號“-”,那麼您將輸入:
find -type f -execdir rename 's/-/_/' *.jpg '{}' \;