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

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

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

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

我尝试了几个版本,但是我猜我的语法可能有问题,因为我对 Linux 还不熟悉。

答案1

解决这个问题至少有十亿种不同的方法,但以下是最有竞争力的方法:

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 比基本的通配符更好,因为您可以真正过滤所选文件。请注意奇怪的语法。

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

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

如果我们只是重命名doc 到 txt...

rename命令在搜索方面与 sed 类似。显然,这不会对格式进行任何转换。

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

答案2

for i in *.doc ; do mv "$i" $(echo $i | sed s/doc/txt/) ; done

相关内容