如何在Linux中重新命名所有包含破折號的子目錄中的所有.jpg檔案?

如何在Linux中重新命名所有包含破折號的子目錄中的所有.jpg檔案?

我有帶有破折號的子資料夾(例如名稱為 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 '{}' \;

相關內容