![文件夹内每个文件的 bash 命令](https://linux22.com/image/1080521/%E6%96%87%E4%BB%B6%E5%A4%B9%E5%86%85%E6%AF%8F%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%20bash%20%E5%91%BD%E4%BB%A4.png)
我有一组文件,我想对其应用相同的命令,并且输出应该包含与处理后的文件相同的名称,但扩展名不同。
目前我正在将 /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