递归删除所有目录中除一个最新文件以外的所有文件

数据压缩器

我的系统仅依赖于每个子目录只有一个文件(PDF,DOCX)。有成千上万的子目录。由于权限错误,在某些情况下,我得到了多个文件。在这些情况下,我只想保留一个最近修改的文件。

我能够成功导出包含多个文件的目录列表:

find . -type f -printf '%h\n' | sort | uniq -d >test.txt

因此,我最后得到了一个不错的清单,其中列出了所有需要查看的目录。但这很长。

我还能够自动删除目录中除最近修改的文件以外的所有内容:

ls -t | tail -n +2 | xargs -d '\n' rm -f

确实会删除所有文件,但会删除最近修改的文件。

我遇到的问题是第二个命令仅在该目录中有效。我还没有找到一种将其递归应用于所有目录的方法。

我尝试过:

find /data/test/CONTAINER/SANDBOX -type f -exec sh -c 'ls -t | tail -n +2 | xargs -d '\n' rm -f ' {} \;

但这只是产生xargs:参数行太长

我试图调整xargs参数,但是我确定必须有更好的方法来执行此操作?也许是一个shell脚本,它通过将cd的文件夹的test.txt文件通过管道传送到cd,然后在每个文件夹中执行第二个命令?还是简单地将命令2递归地应用于所有子文件夹的方法,而不管该文件夹中包含多少个文件?

我想到的最后一件事是,也许我尝试过的命令3适用于主目录,那里有成千上万个目录,难怪参数行可能会太长-但是-mindepth 2并没有改变任何事情。

谢谢

N01

我认为以下脚本可以为您解决问题。

#!/bin/bash

DIR_TO_FIND="/path/to/dir"

find "$DIR_TO_FIND" -type d | while read -r DIR; do
    cd "$DIR"
    ls -t | tail -n +2 | xargs -d '\n' rm -f
    cd "$DIR_TO_FIND" 
done

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何删除除N个最新文件以外的所有文件?

删除Python中除最新文件夹以外的所有文件夹

如何删除目录中除Solaris中的一个文件以外的所有文件

批处理文件,删除目录中除最新文件夹外的所有文件夹

删除除一个以外的所有.log文件

C++,将目录中的所有csv文件复制到一个新文件

如何删除Cloud Firestore中除一个文件以外的所有文件?

如何删除除目录中的文件以外的所有文件?

您可以在Linux中更改除一个目录以外的所有文件的权限吗?

.gitignore-忽略目录中除一个文件以外的所有内容

如何删除当前目录中除一个文件外的所有文件?

运行脚本后删除目录中除一个文件外的所有文件

Linux / shell-从一个目录中删除除一个目录以外的所有(子)子文件夹

Ant任务删除目录中除一个文件外的所有内容

在列中查找所有相同的元素并创建一个新文件

递归地从目录中删除除N个文件外的所有文件

使目录中的所有新文件可供组访问

使用find查找特定目录并删除其中一个目录以外的所有文件

删除除一个文件外的所有文件/目录

删除find输出中的所有目录,并将输出重定向到新文件

忽略除一个文件外的所有文件和子目录中的文件

Powershell删除除一个以外的所有文件夹

删除除一个以外的所有文件夹

用rm删除除一个以外的所有文件

删除除bash中的某些文件以外的所有文件,而没有cd到目录中?

Shell脚本:如何删除目录中除文件中列出的文件以外的所有文件?

在多个级别中删除除指定文件/目录以外的所有文件/目录

创建目录中所有最新文件的.tar文件

如何将所有文件(文件夹中每个子文件夹中的最新文件除外)压缩到每个子文件夹一个ZIP文件中?