Tak*_*Tak 25 command-line bash scripts
我有folderA一些文件的编号序列以a_000000. 我想要做的是删除从特定数字开始的文件:让我们说a_000750直到这个folderA. 任何人都可以请教如何使用shell脚本来做到这一点?
ter*_*don 41
假设您知道或可以猜测范围的结尾,您可以使用大括号扩展:
rm a_{000750..000850}
Run Code Online (Sandbox Code Playgroud)
以上将删除 a_000750 和 a_000850 之间的 101 个文件(并抱怨引用不存在文件的文件名)。如果您有太多文件,请使用find:
find . -name 'a_*' | while read file; do
[ "${file#./a_}" -gt 000749 ] && rm -v "$file"
done
Run Code Online (Sandbox Code Playgroud)
在这里,find只列出所有匹配a_*. 该列表被传递到一个while循环,其中每个文件名都被读入变量$file。然后,使用 bash 的字符串操作功能,如果数字部分(find 将文件打印为./file,因此${file#./a_}只打印数字)为000750或更大,则删除该文件。的-v是就在那里,所以你可以看到被拆除哪些文件。
请注意,以上假设文件名合理。如果您的名字可以有空格、换行符或其他奇怪的字符,请改用:
find . -name 'a_*' -print0 | while IFS= read -rd '' file; do
[ "${file#./a_}" -gt 000749 ] && rm -v "$file"
done
Run Code Online (Sandbox Code Playgroud)