我在一个文件夹和很多子文件夹下有十万个文件。
许多文件以空格/空格结尾开始存在一些问题。
在这种情况下,我想用下划线(
)替换这些空格(_
)。
但是,我的命令似乎改变了路径中的所有空格。
示例:
/Volumes/FolderA/Test 1/12345 Pro/12345 Pro .pdf
/Volumes/FolderA/Test 2/54321 Pro/ 54321 Pro.ai
/Volumes/FolderA/Test 3/ 33333 Pro /
更改后:(更改所有空格,包括路径)
/Volumes/FolderA/Test_1/12345_Pro/12345_Pro_.pdf
/Volumes/FolderA/Test_2/54321_Pro/_54321_Pro.ai
/Volumes/FolderA/Test_3/_33333_Pro_/
我想要的是什么:
/Volumes/FolderA/Test 1/12345 Pro/12345 Pro_.pdf
/Volumes/FolderA/Test 2/54321 Pro/_54321 Pro.ai
/Volumes/FolderA/Test 3/_33333 Pro_/
或
/Volumes/FolderA/Test 1/12345 Pro/12345_Pro_.pdf
/Volumes/FolderA/Test 2/54321 Pro/_54321_Pro.ai
/Volumes/FolderA/Test 3/_33333_Pro_/
正如我测试了许多代码,但没有人可以做我想要的。 这是我的Mac终端编码:
find . -name '\ *' | while read f; do mv -v "$f" "$(sed 's/ /_/g' <<< "$f")" ; done
find . -name '*.pdf' | while read f; do mv -v "$f" "$(sed 's/ /_/g' <<< "$f")" ; done
此外,是否可以找到最后一个空格并替换它?
答案 0 :(得分:0)
如果您需要在上一个_
- 分隔字段中使用_
替换所有空格,则应将awk
与gsub
一起使用:
awk -F"/" 'BEGIN {OFS = FS}{{gsub("[[:space:]]+","_", $NF)}; print}' <<< "$f"
请参阅online demo。
此处,BEGIN {OFS = FS}
将输出字段分隔符设置为字段分隔符,即/
。
gsub("[[:space:]]+","_", $NF)
行用下划线替换最后一个字段([[:space:]]+
)中的所有1 +个空格块($NF
)。