有一些文件名包含'?'如你所知,windows有這類字符的問題。我想用xarg
遞歸地重命名文件夾中的所有文件。例如遞歸重命名文件並刪除一個字符
09 - grand hall?_10.mp3
應該
09 - grand hall_10.mp3
有一些文件名包含'?'如你所知,windows有這類字符的問題。我想用xarg
遞歸地重命名文件夾中的所有文件。例如遞歸重命名文件並刪除一個字符
09 - grand hall?_10.mp3
應該
09 - grand hall_10.mp3
for file in $(find folder -name '*.mp3'); do
mv -v "$file" $(echo "$file" | tr ? _);
done
上面有空白的問題;這是更好的:
find folder -name '*.mp3' -exec echo "'{}'" \; |
while read file; do
echo -n "mv -v $file " && echo $file | tr ? _;
done | sh
的想法是找到的所有文件,然後在報價呼應他們。將輸出傳送到一個while
循環中,該循環爲每個文件構造一個mv
命令,然後將即轉換爲新的shell。
醜,但如果你不喜歡答案,你不應該問這個問題。 :-)
這是非常醜陋的,但我還是把它作爲一個個人的挑戰找到一個班輪,將工作。 :-)
find folder -name '*.mp3' -exec \
sh -c "echo -n 'mv \"{}\" ' && echo \'{}\' | tr ? _" \; | sh
的策略是找到文件,使用echo
構建mv
命令在報價時,其名稱中的每個文件,然後通過管道輸出到一個殼。
找到:缺少參數到'-exec' – mahmood 2012-04-15 13:52:54
@mahmood:固定。謝謝你的收穫! – 2012-04-15 15:05:05
這是這個問題最優雅的答案。謝謝! – 2012-06-29 16:48:31
這一個班輪應該工作,即使文件名包含單/雙引號和空格:
(IFS=\0;find . -name \*\\?\* -type f -print0| while read -d '' f;do mv -v $f $(echo $f|tr -d \?);done)
說明: '?'
find
只搜索文件名稱中包含\0
作爲分隔符在IFS
,find
(由-print0
)和read
(由-d ''
)可以處理包含特殊字符,如單引號,雙引號,空格等的文件名IFS
完好無損。.
可以被任何其他目錄替換。
當你在它的時候,你想刪除空格嗎? – Shep 2012-04-15 14:29:28
這並不壞。那麼該怎麼辦? – mahmood 2012-04-15 14:30:40
並解決_have to_ use'xarg'? – Shep 2012-04-15 14:31:03