删除目录中的文件和文件夹(不包括一个文件夹的内容)的最佳方法是什么?

删除目录中的文件和文件夹(不包括一个文件夹的内容)的最佳方法是什么?

我正在尝试自动化一些我经常做的文件管理工作。我想删除目录中的所有文件和文件夹,同时排除文件夹“./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复制/删除。

相关内容