使用“for i in”可能会导致“参数太多”错误
更好的方法是将查找管道传输到下一个进程。
例:
find . -type f -name "*.tex" | while read file do mv $file ${file%%tex}g done
(注意:不处理带空格的文件)
有一个出色的Perl重命名脚本,附带一些发行版,否则你可以在网上找到它。 (我不确定它在哪里正式,但是 就是这个 )。检查你的重命名是否由Larry Wall撰写(AUTHOR部分 man rename )。它会让你做类似的事情:
man rename
find . [-maxdepth 2] -name "*.tex" -exec rename 's/\.tex//' '{}' \;
在这里使用-exec最简单,因为只执行一个操作,并且多次调用重命名并不太昂贵。如果您需要做多件事,请使用“while read”表单:
find . [-maxdepth 2] -name "*.tex" | while read texfile; do rename 's/\.tex//' $texfile; done
如果您有想要仅调用一次的内容:
find . [-maxdepth 2] -name "*.tex" | xargs rename 's/\.tex//'
最后一个清楚地说明了重命名是多么有用 - 如果一切都在同一个地方,你就有了一个快速的regexp重命名器。
运用 bash , find 和 mv 从您的基目录。
bash
find
mv
for i in $(find . -type f -maxdepth 2 -name "*.tex"); do mv $i $(echo "$i" | sed 's|.tex$||'); done
的 变化2 强> 基于这里的其他答案。
find . -type f -maxdepth 2 -name "*.tex" | while read line; do mv "$line" "${line%%.tex}"; done
PS:我没有得到关于逃避的部分' . 'by pax ...
.
pax