yae*_*ael 1 linux bash find shell-script
我们创建以下命令以仅删除早于 100 分钟的空文件夹
find /tmp -type d -empty -mmin +100 -printf '%p was deleted!!\n' -delete
Run Code Online (Sandbox Code Playgroud)
因为我们打算在生产机器上从 cron 作业运行它
我们想了解空标志是否也会忽略带有链接或空文件的文件夹
或者换句话说,如何检查文件夹的空标志?
空的意思是空的。如果目录中有任何类型的文件,则该目录不为空。为了显示:
$ mkdir dir{1..8}; \
ln -s /etc/ dir1/workingLink; \
ln -s noSuchFile dir2/brokenLink; \
mkfifo dir3/fifo;
touch dir4/emptyFile; \
echo foo > dir5/nonEmptyFile; \
touch dir6/.hiddenFile; \
mkdir dir7/subdir
$ tree -a
.
??? dir1
? ??? workingLink -> /etc/
??? dir2
? ??? brokenLink -> noSuchFile
??? dir3
? ??? fifo
??? dir4
? ??? emptyFile
??? dir5
? ??? nonEmptyFile
??? dir6
? ??? .hiddenFile
??? dir7
? ??? subdir
??? dir8
Run Code Online (Sandbox Code Playgroud)
因此,我们有一个带有工作符号链接的目录,一个带有断开的链接(指向一个不存在的文件),一个带有 FiFo(命名管道),一个带有空文件,一个带有不存在的文件空的,一个带有隐藏文件,一个带有子目录,只有一个是空的。哪一个会被删除?
$ find . -type d -empty -printf '%p WAS DELETED!\n' -delete \
-or -printf '%p: not empty!\n'
./dir8 WAS DELETED!
./dir3/fifo: not empty!
./dir3: not empty!
./dir5/nonEmptyFile: not empty!
./dir5: not empty!
./dir6/.hiddenFile: not empty!
./dir6: not empty!
./dir2/brokenLink: not empty!
./dir2: not empty!
./dir4/emptyFile: not empty!
./dir4: not empty!
./dir7/subdir WAS DELETED!
./dir7 WAS DELETED!
./dir1/workingLink: not empty!
./dir1: not empty!
.: not empty!
Run Code Online (Sandbox Code Playgroud)
因此,删除了三件事:
dir8
。dir7/subdir
dir7
。这是因为find
先被删除dir7/subdir
然后dir7
是空的,所以也被删除了。因此,目录中的任何类型的内容都会阻止它被此命令删除,但您需要小心,以防目录中唯一的内容是其他空目录。在这种情况下,该find
命令还将删除父目录,因为它在完成时将是空的。
如果您不想删除可能导致父目录被删除的子目录,使用 GNU find(Linux 上的默认设置),您可以使用该-maxdepth
标志来限制find
当前目录:
$ find . -maxdepth 1 -type d -empty -printf '%p WAS DELETED!\n' \
-delete -or -printf '%p: not empty!\n'
./dir8 WAS DELETED!
./dir3: not empty!
./dir5: not empty!
./dir6: not empty!
./dir2: not empty!
./dir4: not empty!
./dir7: not empty!
./dir1: not empty!
.: not empty!
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
193 次 |
最近记录: |