我正在尝试自动化一些我经常做的文件管理工作。我想删除目录中的所有文件和文件夹,同时排除文件夹“./xfer”及其内容。
我一直在尝试使用 find 命令来完成此操作,但结果有点笨拙。有没有更好的办法?我通过运行以下命令来设置测试环境:
mkdir test0{1..5}; find . -type d -exec touch '{}'/test-0{1..5} \;
这是我一直在研究的命令。顺便说一句,我有点新,主要将其作为学习练习。另外,这将是我即将完成的小脚本的最后一个命令。
find /some/directory/path/* -type f ! -path "/some/directory/path/xfer/*" -exec rm -fv {} \;; find /some/directory/path/* -type d ! -path "/some/directory/path/xfer" -exec rm -rfv {} \;
答案1
您可以使用-prune
:
find . -path ./xfer -prune -o -exec rm -fv {} \;
列出文件时,如果路径匹配,则./xfer
删除文件,否则rm
调用。
答案2
find ./* -prune ! -path './xfer' -exec rm -fr {} +
更正确(但 GNU):
find . -mindepth 1 -maxdepth 1 ! -name 'xfer' -exec rm -fr {} +
或者
find . ! -path './xfer' ! -path '.xfer/*' -delete
答案3
for 循环怎么样?
for i in $(ls|grep -v xfer);do rm -r $i;done
答案4
也许不是你想要的,但我通常就是这么做的。我把我想保留的东西移开。
mv dir/keepme tmp/keepme
rm -rf dir/*
mv tmp/keepme dir/keepme
请小心保留在同一文件系统中,以免mv
复制/删除。