有人可以编写一个Shell脚本,删除文件夹中除了扩展名为pdf
的文件以外的所有文件吗?
有人可以编写一个Shell脚本,删除文件夹中除了扩展名为pdf
的文件以外的所有文件吗?
find . -type f ! -iname '*.pdf' -delete
这将仅在当前目录中生效:
find . -maxdepth 1 -type f ! -iname '*.pdf' -delete
$ ls -1 | grep -v '.pdf$' | xargs -I {} rm -i {}
或者,如果您有信心:
$ ls -1 | grep -v '.pdf$' | xargs -I {} rm {}
或者,更加稳妥的版本:
$ find . -maxdepth 1 -type f ! -iname '*.pdf' -delete
{}
或"{}"
对于shell来说没有区别,它是传递给命令的单个参数。 - Julianols
不是用来生成其他工具解析文件列表的。ls
旨在生成用户可读的文件列表,并通过使其用户可读,ls
可能会替换文件名中的字符,从而导致错误结果。touch $'A file\nwith a newline'
将创建一个会破坏您命令的文件。 - Julianotouch $'a\nfile\nwith\nnewlines\nin\nits\nname'
。 - gniourf_gniourfshopt -s extglob
rm !(*.pdf)
shopt -s failglob
,效果会更好。 - gniourf_gniourfls | grep -v '.pdf$' | xargs rm
这将过滤掉所有不以PDF结尾的文件,并对它们执行RM命令
ls
命令的输出是非常糟糕的做法,因为它会在许多方面出现问题(文件名包含空格或以连字符开头)。 - gniourf_gniourf