Mar*_*rco 6 command-line bash scripts
我正在尝试编写脚本,删除文件名与文本文件中的通配符匹配的文件。
我正在使用以下
if [ -z "$1" ]; then
echo -e "Usage: $(basename $0) FILE\n"
exit 1
fi
if [ ! -e "$1" ]; then
echo -e "$1: File doesn't exist.\n"
exit 1
fi
while read -r line; do
[ -n "$line" ] && rm -- "$line"
done < "$1"
Run Code Online (Sandbox Code Playgroud)
在文件中list有行
file*
test*
Run Code Online (Sandbox Code Playgroud)
如果我运行这个,我会得到以下信息
rm: cannot remove ‘file*’: No such file or directory
rm: cannot remove ‘test*’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我认为 * 不被接受来删除文件,例如
file 1
file2
file2.txt
test 001 more teskt.txt
Run Code Online (Sandbox Code Playgroud)
抱歉,我不是 linux 专家。也许有人有一个简单的答案,也许用某些东西替换 * ?
路径名扩展发生在变量扩展之后,但只发生在命令行的未引用部分。
rm -- $line # <- no double quotes to expand wildcards
Run Code Online (Sandbox Code Playgroud)
这不适用于包含空格的文件名,因为在变量扩展后也会发生分词。
您可以使用 Perl 来扩展 globs:
perl -lne 'unlink glob' -- list.txt
Run Code Online (Sandbox Code Playgroud)
普通glob需要空格反斜杠,但如果对您更方便,您可以切换到File::Glob以获得不同的行为:
perl -MFile::Glob=:bsd_glob -lne 'unlink glob' -- list.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
419 次 |
| 最近记录: |