更改目录中每个文件的扩展名,*.txt 除外
Change extension for every file in dir, except *.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
。为了让它工作,我们最后必须添加 \;
部分。
我有一个包含很多文件的目录 - 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
。为了让它工作,我们最后必须添加 \;
部分。