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

我有一组文件,我想在其上应用相同的命令,输出应包含与已处理文件相同的名称,但具有不同的扩展名。

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

我尝试了几个版本,但我想我的语法有些不对劲,因为我是linux新手。

至少有十亿种不同的接近方式,但这里是最有力的竞争者:

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 1find保留在当前工作目录中。 -type f可用于过滤常规文件。

如果我们只是 doc 重命名为txt …

rename命令在搜索中类似于sed。 显然,这将无法转换格式。

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