【发布时间】:2018-11-25 02:45:49
【问题描述】:
我在一个文件夹和许多子文件夹下有十万个文件。
许多文件以空格开头/以空格结尾的问题。
在这种情况下,我想将这些空格 ( ) 替换为下划线 (_)。
但是,我的命令似乎改变了路径中的所有空格。
例子:
/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
另外,是否有可能找到最后出现的空格并替换它?
【问题讨论】:
-
当使用“${f// /_}”时,它不会递归/更改文件路径
-
嗯,你需要
"$(sed 's/\(.*\) /\1_/' <<< "$f")吗? -
哇,它正在处理文件;非常感谢!!但我发现它似乎不适用于以空格开头/以空格结尾的文件夹;我尝试对此进行调查。非常感谢
-
能否请您分享不适用于该 sed 命令的字符串?
-
不工作的文件夹是>> /Desktop/Test/ Test1 / /Desktop/Test/abc_123.png 我的代码和你的编码在这种情况下:find .名称'\ *' |读 f;做 mv -v "$f" "$(sed 's/(.*) /\1_/'
标签: bash macos sed replace find