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



我有一个包含大量文件的目录 - 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

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

只需使用 -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。要使其正常工作,我们最终必须添加;部分。

相关内容

  • 没有找到相关文章

最新更新