我需要删除的扩展名“.tex”:
./1-aoeeu/1.tex
./2-thst/2.tex
./3-oeu/3.tex
./4-uoueou/4.tex
./5-aaa/5.tex
./6-oeua/6.tex
./7-oue/7.tex
请下面一些工具做到这一点:
桑达找到
红宝石
蟒蛇
我可怜的尝试:
$find . -maxdepth 2 -name "*.tex" -ok mv `sed 's@.tex@@g' {}` {} +
我需要删除的扩展名“.tex”:
./1-aoeeu/1.tex
./2-thst/2.tex
./3-oeu/3.tex
./4-uoueou/4.tex
./5-aaa/5.tex
./6-oeua/6.tex
./7-oue/7.tex
请下面一些工具做到这一点:
桑达找到
红宝石
蟒蛇
我可怜的尝试:
$find . -maxdepth 2 -name "*.tex" -ok mv `sed 's@.tex@@g' {}` {} +
Python脚本做同样的:
import os.path, shutil
def remove_ext(arg, dirname, fnames):
argfiles = (os.path.join(dirname, f) for f in fnames if f.endswith(arg))
for f in argfiles:
shutil.move(f, f[:-len(arg)])
os.path.walk('/some/path', remove_ext, '.tex')
一种方式,不一定是最快的(但至少最快的开发):
pax> for i in *.c */*.c */*/*.c ; do ...> j=$(echo "$i" | sed 's/\.c$//') ...> echo mv "$i" "$j" ...> done
因为你的MAXDEPTH是2,剧本只是附和这相当于mv
的时刻(用于测试目的)命令和C文件工作(因为我没有tex
文件来测试)。
或者,你可以使用其所有的力量因而发现:
pax> find . -maxdepth 2 -name '*.tex' | while read line ; do ...> j=$(echo "$line" | sed 's/\.tex$//') ...> mv "$line" "$j" ...> done
有一个很好的Perl脚本重命名附带的一些发行,否则你可以找到它在网络上。 (我不知道位于何处正式,但是这是它 )。 请检查您的命名是写由Larry Wall(作者部分man rename
)。 它可以让你做这样的事情:
find . [-maxdepth 2] -name "*.tex" -exec rename 's/\.tex//' '{}' \;
使用-exec是最简单的,因为在这里,只有一个执行操作,并且它不是调用重命名多次太贵了。 如果你需要做多件事情,用“而读”的形式:
find . [-maxdepth 2] -name "*.tex" | while read texfile; do rename 's/\.tex//' $texfile; done
如果你有什么要一次调用:
find . [-maxdepth 2] -name "*.tex" | xargs rename 's/\.tex//'
这最后一个明确如何有用的重命名是 - 如果一切都已经在同一个地方,你已经有了一个快速的正则表达式重命名。
“在我的”使用可能会导致“太多的参数” errrors
更好的方法是管道找到到下一道工序。
例:
find . -type f -name "*.tex" | while read file
do
mv $file ${file%%tex}g
done
(注:惯于处理与空格的文件)
使用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:我没有得到有关转义“的一部分.
“通过pax
...