更改dir中每个文件的扩展名,* .txt除外

时间:2016-05-23 13:38:01

标签: bash find cat mv

我有一个包含大量文件的目录 - txt和其他人。 我想将其他文件的扩展名更改为txt

现在 - 我用这个:

find . ! -name '*.txt' -type f -exec ls -f {} + > to_txt.txt
for i in ``cat to_txt.txt``; do 
    mv $i $i.txt && echo $i "File extension have been changed" || echo "Something went wrong"
done;
rm to_txt.txt

脚本运行正常,但我认为它很笨拙 有没有更聪明,更优雅的方法呢?

1 个答案:

答案 0 :(得分:2)

只需使用-exec执行mv命令:

find . ! -name '*.txt' -type f -exec mv {} {}.txt \;
#                                    ^^^^^^^^^^^^
#                                    here the magic

这是如何运作的?

find . ! -name '*.txt' -type f就是您已经拥有的:它会查找那些名称不以.txt结尾的文件。

然后,关键是-exec的使用:在那里,我们使用{}来携带已找到的每个文件的值。由于它充当变量,因此您可以将其用作变量并执行命令。在这种情况下,您想要mv $file $file.txt,这就是我们所做的:mv {} {}.txt。为了让它工作,我们最终必须添加\;部分。