首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在递归下用文件名下划线替换空白。

在递归下用文件名下划线替换空白。
EN

Stack Overflow用户
提问于 2018-06-15 09:14:22
回答 1查看 931关注 0票数 1

我在一个文件夹中有10万个文件,在很多子文件夹下。

有一些问题很多文件都是以空格开始/以空间结尾。

在这种情况下,我想用下划线(_)替换这些空格()。

但是,我的命令似乎改变了路径中的所有空格。

示例:

代码语言:javascript
复制
/Volumes/FolderA/Test 1/12345 Pro/12345 Pro .pdf
/Volumes/FolderA/Test 2/54321 Pro/ 54321 Pro.ai
/Volumes/FolderA/Test 3/ 33333 Pro /

更改后:(更改所有空格,包括路径)

代码语言:javascript
复制
/Volumes/FolderA/Test_1/12345_Pro/12345_Pro_.pdf
/Volumes/FolderA/Test_2/54321_Pro/_54321_Pro.ai
/Volumes/FolderA/Test_3/_33333_Pro_/

我想要的:

代码语言:javascript
复制
/Volumes/FolderA/Test 1/12345 Pro/12345 Pro_.pdf
/Volumes/FolderA/Test 2/54321 Pro/_54321 Pro.ai
/Volumes/FolderA/Test 3/_33333 Pro_/

代码语言:javascript
复制
/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终端代码:

代码语言:javascript
复制
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

此外,能否找出最后一次出现的空间,并加以替换?

EN

回答 1

Stack Overflow用户

发布于 2018-06-15 09:53:24

如果需要在最后一个_字段(**)中用 _**-delimited 替换所有的空白空间,则应该在gsub中使用awk

代码语言:javascript
复制
awk -F"/" 'BEGIN {OFS = FS}{{gsub("[[:space:]]+","_", $NF)}; print}' <<< "$f"

在线演示

在这里,BEGIN {OFS = FS}将输出字段分隔符设置为字段分隔符,即/

gsub("[[:space:]]+","_", $NF)行将最后字段($NF)中的所有1+空白块([[:space:]]+)替换为下划线。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50872459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档