【发布时间】:2014-07-30 00:59:26
【问题描述】:
如何删除文件夹中以相同前缀开头的所有文件?例如:
我有文件:
SVM1.txt
SVM2.csv
SVM3.mat
helloworld.txt
README.txt
我想删除所有以“SVM”开头的文件。请注意,它们以相同的前缀开头,但文件类型不同!
【问题讨论】:
如何删除文件夹中以相同前缀开头的所有文件?例如:
我有文件:
SVM1.txt
SVM2.csv
SVM3.mat
helloworld.txt
README.txt
我想删除所有以“SVM”开头的文件。请注意,它们以相同的前缀开头,但文件类型不同!
【问题讨论】:
当然是通配符。
rm SVM*
【讨论】:
for i in $(seq 1 3); do rm SVM${i}*; done。正确有效地做这件事的乐趣在哪里?
for i in SVM*; do rm "$i"; done 或khadija's solution 优于rm SVM* 的合理案例。
declare -i n=1; while test "$n" -le 3 ; do rm SVM${n}*; ((n++)); done 也可能是合适的。
除了直白
rm SVM*
如果有很多很多匹配的文件,可能会失败(命令行太长),你可以使用
find . -prune -name 'SVM*' -exec rm {} +
它将一次对尽可能多的文件重复运行rm,直到删除所有匹配的文件。 -prune 阻止 find 进入任何子目录以查找匹配文件。
【讨论】:
在文件所在的目录中,
ls | grep '^SVM.*' | xargs rm
在 grep ^SVM.* 处停下来仔细检查您是否有要删除的正确文件,然后添加 xargs rm。
【讨论】:
rm 每个文件),最坏的情况是错误的(当文件名包含换行符时) )。
rm SVM* 将在 ARG_MAX 上失败,您的语法将在带有换行符的文件上失败,但示例中不存在这两种情况。
'^SVM.*'