我需要添加一个脚本,在安装新版本之前从目录中删除文件。我需要从目录一目录保存目录-/logs和里面的所有文件(里面有*.log和*.zg文件(
我创建了这一行:find /directory/path/* ! -name 'logs' -type d,f -exec rm -r -v {} +
但在Debian 11中,它还清理了目录日志中我的文件。你知道什么是原因吗?
它在macbook m1上的zsh上工作,并且没有清理我的日志目录。
小心:(
期望bash脚本,它从给定的目录中删除所有目录和文件,除了一个目录/log和里面的所有文件(里面有*.log和*.zg文件(。
考虑:
$ find . ! -name logs
.
./logs/a
./foo
./foo/a
这里的问题是,尽管目录logs
与主-name logs
匹配,但logs
中的名称a
不匹配。所以find对该文件进行操作。与其否定-name
主目录,不如匹配find:中的logs
目录和prune
$ find . -name logs -prune -o -print
.
./foo
./foo/a
还要注意,您几乎肯定想要find /directory/path ...
,而不是find /directory/path/* ...
。不需要将/directory/path
中的所有名称作为参数传递给find
,事实上。。。奇怪的只需通过顶级目录,让find
处理树的下降。
也许是扩展的globbing。
shopt -s extglob
rm -frv /directory/path/!(logs)