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 1
将find
保留在当前工作目录中。 -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