Rob*_*ert 53 command-line bash
我有一组文件,我想在这些文件上应用相同的命令,输出应包含与已处理文件相同的名称,但具有不同的扩展名。
目前我正在将 /my/data/Andrew.doc 重命名为 /my/data/Andrew.txt 我想对 /my/data/ 文件夹中的所有 .doc 文件执行此操作并保留名称。
我尝试了几个版本,但我想我的语法有问题,因为我是 linux 新手。
Oli*_*Oli 108
至少有十亿种不同的方法来解决这个问题,但这里是最重要的竞争者:
for f in ./*.doc; do
# do some stuff here with "$f"
# remember to quote it or spaces may misbehave
done
Run Code Online (Sandbox Code Playgroud)
find该find命令有一个可爱的小exec命令,非常适合运行(有一些警告)。Find 比基本的 globbing 更好,因为您可以真正过滤您正在选择的文件。小心奇怪的语法。
find . -iname '*.doc' -exec echo "File is {}" \;
Run Code Online (Sandbox Code Playgroud)
请注意,这find是递归的,因此您可能希望-maxdepth 1用于保留find在当前工作目录中。-type f可用于过滤掉常规文件。
该rename命令在搜索中类似于 sed。显然,这不会对转换格式做任何事情。
rename 's/doc$/txt/' *.doc
Run Code Online (Sandbox Code Playgroud)
小智 31
for i in *.doc ; do mv "$i" $(echo $i | sed s/doc/txt/) ; done
Run Code Online (Sandbox Code Playgroud)