为什么 bash 无法展开*
?我想删除sites-*
除最后一个文件之外的所有文件,但我想在运行命令之前测试扩展,但rm
缺少一个--dry-run
选项:
$ ls -la
total 1856
drwxr-xr-x 4 dotancohen dotancohen 12288 Jun 11 13:33 .
drwxrwxr-x 28 dotancohen dotancohen 4096 Jun 6 18:04 ..
-rw-r--r-- 1 dotancohen dotancohen 3072 Jun 10 15:07 sites-1402402025.sqlite3
-rw-r--r-- 1 dotancohen dotancohen 7168 Jun 10 15:08 sites-1402402111.sqlite3
-rw-r--r-- 1 dotancohen dotancohen 12288 Jun 10 15:13 sites-1402402393.sqlite3
-rw-r--r-- 1 dotancohen dotancohen 9216 Jun 10 15:15 sites-1402402493.sqlite3
-rw-r--r-- 1 dotancohen dotancohen 9216 Jun 10 15:16 sites-1402402540.sqlite3
-rw-r--r-- 1 dotancohen dotancohen 592896 Jun 10 15:48 sites-1402403316.sqlite3
$ ls sites-1402402402*
ls: cannot access sites-1402402402*: No such file or directory
$ echo rm sites-1402402402*
rm sites-1402402402*
$ echo sites-1402402402*
sites-1402402402*
$ find sites-1402402402\*
find: `sites-1402402402*': No such file or directory
我知道我可以使用-i
带管道的选项yes no
,但我想诊断这个扩展问题。我没有任何不寻常的 Bash 配置,尽管我.bashrc
现在无法简单地禁用无关的原因。因此,我问什么可能会阻止 Bash 执行 shell 扩展?
答案1
你的命令(ls sites-1402402402*
)是错误的。
正确的是,
ls sites-140240*
或者
ls sites-14024020*
当您运行此命令时ls sites-1402402402*
,ls
命令会尝试搜索名称sites-1402402402
中必须包含的文件名。但这个文件名实际上并不出现在您的文件名中。因此它不会产生此类文件或目录错误。但如果您运行ls sites-140240*
命令,ls
将列出所有以sites-140240
(* 字符在通配符中充当文件名扩展的“通配符”)。