2017-09-27 134 views
1

I found this post here,在和它的作品的空间之后,去除一切,但我不能翻转工程师批一个文件夹内之前删除下划线和一切。从提到的职位的终端线是重命名之前_删除每个字符的多个文件的文件夹

find . -type f -name "* *" -exec bash -c 'f="$1"; s="${f/_/}"; mv -- "$f" "${s/ *./.}"' _ '{}' \; 

所以我需要的是一个下划线,而不是一个空间,我需要它的字符,而不是经过之前删除。例如。如果一个文件被命名为:

random text _987media.mp4 

我希望它被命名为:

987media.mp4 
+1

您需要提供具体示例,说明您希望如何进行转换。 – Inian

+0

刚刚更新了问题 – jons

回答

2

您可以使用bash内部parameter pattern substitution

$ f='random text _987media.mp4' 
$ echo "${f/*_/}" 
987media.mp4 

最后下划线之前删除一切,包括下划线。

要重命名包含_所有文件,批量:

find . -type f -name "*_*" -exec bash -c 'f="$1"; g="${f/*_/}"; mv -- "$f" "$g"' _ '{}' \; 
+0

有没有办法在批处理中执行此操作?如果我将CD放入其中有许多文件的文件夹中? – jons

+1

我已经更新了我的答案。 – randomir

1

只需修改你的答案使用参数扩张串子去除。

find . -type f -name "* *" -exec bash -c 'f="$1"; s="${f##*_}"; mv -- "$f" "$s"' _ '{}' \; 

应该就足够了。部分{f##*_}删除字符串的一部分,直到文件中的最后一个_。更多示例请参考此substring removal部分。

+1

感谢您指出找到下划线的位置。这是我在提到的帖子中让我困惑的部分。 – jons

相关问题