Bash 使用;因为我在;递归求mv

Bash 使用;因为我在;递归求mv,bash,for-loop,recursion,character,mv,Bash,For Loop,Recursion,Character,Mv,bash中的新手(大部分) 我成功地编写了一个命令来删除单个文件夹中的“-”字符以及此后的所有其他字符: for i in *-*; do mv $i ${i/-*/}; done; 这会将所有文件(如“abcf-D.pdf”)更改为“abcf.pdf”,从而从文件名中删除图形的修订名 我的目标是递归地执行此操作,我们的pdf文件都位于文件服务器上的特定目录中,包含在子文件夹和子文件夹中的子文件夹中 这可以从单个命令行完成吗?谢谢 find . -type f -iname '*-*' -ex

bash中的新手(大部分)

我成功地编写了一个命令来删除单个文件夹中的“-”字符以及此后的所有其他字符:

for i in *-*; do mv $i ${i/-*/}; done;
这会将所有文件(如“abcf-D.pdf”)更改为“abcf.pdf”,从而从文件名中删除图形的修订名

我的目标是递归地执行此操作,我们的pdf文件都位于文件服务器上的特定目录中,包含在子文件夹和子文件夹中的子文件夹中

这可以从单个命令行完成吗?谢谢

find . -type f -iname '*-*' -exec rename -v 's/-.*(\.[^.]+)$/$1/' {} \;
假设您只想重命名文件(否则删除
-键入f


编辑


重新阅读问题,意识到我的任务错了,所以我编辑了正则表达式。

Hmm,我没有在Mac上重命名,将查找自制与感谢您的问题的公认答案是重复的,其中包含一个没有
重命名的版本。但我还是建议安装它,因为它是一个很好的工具。这个答案比我的工资等级高一点。。我不知道如何将“foo”替换为“foo和扩展名之前的所有其他字符”@Dotpage基本上使用您问题中的命令,但是使用
$1
而不是
$I
。找到一个端口来替换rename:file-nename。最终代码:find-键入f-iname'-'-exec file rename-v's/-//g'{}\;