如何删除最近在linux目录中创建的所有文件?

时间:2011-10-01 10:22:07

标签: linux rm

我将某些内容解压缩到已经包含很多内容的目录中。我想改为进入一个单独的目录。现在有太多的文件无法区分。但是我刚刚创建的文件是刚刚创建的(对吗?)并且原始文件没有被修改很长时间(至少一天)。有没有办法根据创建信息删除这些未解压缩的文件?

4 个答案:

答案 0 :(得分:6)

Tar通常会恢复文件时间戳,因此按时间过滤不太可能。

如果您还有tar文件,可以使用它来删除解压缩的内容,例如:

tar tf file.tar --quoting-style=shell-always |xargs rm -i

以上内容适用于大多数情况,但不是全部(在其中包含回车符的文件名会破坏它),所以要小心。

您可以通过添加-r来删除目录,但是手动删除顶层目录可能更安全。

答案 1 :(得分:3)

找到。 -mtime -1 -type f | xargs rm

但先用

进行测试 找到。 -mtime -1 -type f | xargs echo

答案 2 :(得分:1)

为了提高复杂性,这个问题有几个不同的答案。

首先,如果这是一次性的,并且在这个特定的实例中,您绝对确定文件名中没有奇怪的字符(空格可以,但不是制表符,换行符或其他控制字符,也不是unicode字符)会工作:

tar -tf file.tar | egrep '^(\./)?[^/]+(/)?$' | egrep -v '^\./$' | tr '\n' '\0' | xargs -0 rm -r

所有egrepping都是跳过子目录的所有子目录。

使用时髦文件名的另一种方法是:

mkdir foodir
cd foodir
tar -xf ../file.tar
for file in *; do rm -rf ../"$file"; done

这将创建一个扩展档案的目录,但听起来你还是想要它。它也不会处理任何名称以.开头的文件。

要使该方法适用于以.开头的文件,请执行以下操作:

mkdir foodir
cd foodir
tar -xf ../file.tar
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 sh -c 'for file in "$@"; do rm -rf ../"$file"; done' junk

最后,从Mat's answer开始,您可以执行此操作,它可以用于任何文件名,而不需要您再次解压缩该目录:

tar -tf file.tar | egrep '^(\./)?[^/]+(/)?$' | grep -v '^\./$' | tr '\n' '\0' | xargs -0 bash -c 'for fname in "$@"; do fname="$(echo -ne "$fname")"; echo -n "$fname"; echo -ne "\0"; done' junk | xargs -0 rm -r

答案 3 :(得分:0)

您可以使用以下命令处理文件和目录:

tar  -tf ../test/bob.tar --quoting-style=shell-always | sed -e "s/^\(.*\/\)'$/rmdir \1'/; t; s/^\(.*\)$/rm \1/;" | sort | bash

你可以看到将会发生什么事情从管道中拯救' bash'

tar  -tf ../test/bob.tar --quoting-style=shell-always | sed -e "s/^\(.*\/\)'$/rmdir \1'/; t; s/^\(.*\)$/rm \1/;" | sort

使用换行处理文件名需要更多处理。