文件夹中每个文件的bash命令


31

我有一组文件,我想对它们应用相同的命令,并且输出应包含与已处理文件相同的名称,但扩展名不同。

目前,我正在将/my/data/Andrew.doc重命名为/my/data/Andrew.txt。我想对/ my / data /文件夹中的所有.doc文件执行此操作,并保留名称。

我尝试了多个版本,但是我猜想我在linux入门时语法上有问题。


→更加完整和实际的示例:stackoverflow.com/a/43474757/444255
Frank Nocke

Answers:


76

至少有十亿种不同的解决方法,但这是最主要的竞争者:

Bash for循环

for f in ./*.doc; do
    # do some stuff here with "$f"
    # remember to quote it or spaces may misbehave
done

使用 find

find命令有一个可爱的小exec命令,非常适合运行某些事情(有一些警告)。“查找”优于基本的“遍历”,因为您可以真正筛选出所选择的文件。请注意奇数语法。

find . -iname '*.doc' -exec echo "File is {}" \;

请注意,这find是递归的,因此您可能要使用它-maxdepth 1来保留find当前工作目录。-type f可用于过滤掉常规文件。

如果我们只是文档重命名为txt ...

搜索时,该rename命令类似于sed。显然,这不会做任何转换格式的操作。

rename 's/doc$/txt/' *.doc

22
for i in *.doc ; do mv "$i" $(echo $i | sed s/doc/txt/) ; done
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.