我在一个文件夹中有10万个文件,在很多子文件夹下。
有一些问题很多文件都是以空格开始/以空间结尾。
在这种情况下,我想用下划线(_)替换这些空格()。
但是,我的命令似乎改变了路径中的所有空格。
示例:
/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此外,能否找出最后一次出现的空间,并加以替换?
发布于 2018-06-15 09:53:24
如果需要在最后一个_字段(**)中用 _**-delimited 替换所有的空白空间,则应该在gsub中使用awk
awk -F"/" 'BEGIN {OFS = FS}{{gsub("[[:space:]]+","_", $NF)}; print}' <<< "$f"见在线演示。
在这里,BEGIN {OFS = FS}将输出字段分隔符设置为字段分隔符,即/。
gsub("[[:space:]]+","_", $NF)行将最后字段($NF)中的所有1+空白块([[:space:]]+)替换为下划线。
https://stackoverflow.com/questions/50872459
复制相似问题