Linux
如何在目前目錄的所有文件名中用另一個字元替換一個字元?
如何重命名目前文件夾中的所有文件/子目錄?
可以說,我有許多帶有空格的文件和子目錄,我想用下劃線替換所有空格。
File 1 File 2 File 3 Dir 1 Dir 3
應該改名為
File_1 File_2 File_3 Dir_1 Dir_3
如果您還需要重命名子目錄中的文件,並且您
find
支持-execdir
謂詞,那麼您可以這樣做find /search/path -depth -name '* *' \ -execdir bash -c 'mv -- "$1" "${1// /_}"' bash {} \;
感謝@glenn jackman 建議
-depth
選項find
並讓我思考。請注意,在某些系統(包括 GNU/Linux 系統)上,
find
可能無法找到名稱包含空格以及不構成有效字元的字節序列的文件(典型的媒體文件名稱包含以字元集編碼的非 ASCII 字元與地區不同)。將語言環境設置為C
(如LC_ALL=C find...
)將解決問題。
在任何 shell 中,您都可以遍歷名稱中包含空格的文件。在 bash、ksh 和 zsh 中,用下劃線替換空格很容易
${VARIABLE//PATTERN/REPLACEMENT}
。for x in *" "*; do mv -- "$x" "${x// /_}" done
在 Debian、Ubuntu 和衍生產品上,您可以使用 Perl
rename
(其他發行版提供了一個不同的程序rename
,而該程序在這裡沒有幫助)。rename 's/ /_/g' *
一個強制性的 zsh 解決方案:
autoload zmv zmv '(*)' '${1// /_}'
強制性 POSIX 解決方案:
for x in *" "*; do y=$(printf %sa "$x" | tr " " "_") mv -- "$x" "${y%a}" done