2017-04-05 115 views
1

我试图重命名目录中的多个文件。目的是删除尾部的_bkp扩展名。 我想到的是如下所示,但大家都知道,这不会奏效,但你明白了。任何帮助?用单个bash命令重命名目录中的多个文件

find -iname "*.sql_bkp" -exec mv {} sed -e 's/\_bkp//g' {} \; 

find -iname *.sql_bkp -exec mv {} $(sed -e 's/\_bkp//g' {}) \; 
+0

不,你必须给一个目录下找到? – 123

+1

@ 123 GNU find假定'.'如果你没有指定一个 –

+0

@EricRenouf啊对,不知道,谢谢。 – 123

回答

3

您可以使用:

find . -iname '*.sql_bkp' -exec bash -c 'echo mv "$1" "${1%_bkp}"' - {} \; 

当你满意的输出,就在mv

+0

介意解释“$ {1%_bkp}” - {}部分? –

+0

''$ {1%_bkp}“''从'$ 1'的末尾移除'_bkp'。 ' - {}'将2个参数传递给'bash -c'命令行.Dummy参数'-'填充了'$ 0','{}'填充了'$ 1' – anubhava

0

删除echo试试这个 -

$find -iname "*.sql_bkp" -exec basename {} _bkp \; 

OR

$for i in *.sql_bkp; do mv "$i" "$(basename "$i" _bkp)";done