2011-10-01 43 views
5

我將一些東西解開成一個已經包含很多東西的目錄。我想解開一個單獨的目錄。現在有太多的文件可以區分。然而,我已經解開的文件已經被創建(對嗎?),並且原始文件沒有被修改很長時間(至少一天)。有沒有辦法根據它們的創建信息刪除這些untarred文件?如何刪除最近在linux目錄下創建的所有文件?

回答

6

Tar通常會恢復文件時間戳,因此按時間過濾不太可行。

如果您仍然有tar文件,你可以用它來刪除你喜歡的東西解壓什麼:

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

以上在大多數情況下工作,但不是所有的(文件名有一個回車在他們將打破它),所以要小心。

您可以通過將-r添加到目錄中來刪除這些目錄,但只需手動刪除頂層目錄可能更安全。

+2

使它與文件名中的空格一起工作真的很容易,而且這將是一個更好的答案。 – Omnifarious

+0

@omnifa如何使這個工作與空間?刪除提取的目錄,我是否也應該在rm之後包含-R? – AnkurVj

+0

@AnkurVj:不幸的是,實際上沒有辦法讓tar給你一個空字符分隔的文件名列表,這是相當令人失望的。是的,在'rm'之後應該有一個'-r'。由於馬特沒有更新答案,我會自己填寫。 – Omnifarious

3

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

但首先用

找到。 -mtime -1 -type f | xargs回聲

+2

除了兩件事之外,這將是一件好事。首先,**總是**使用'-print0'和'xargs -0'。您不希望文件名中的隨機空格字符導致您的問題。其次,'tar'恢復時間戳,所以你不能在這裏實際使用mtime。也許是,如果你的文件系統被配置爲更新它,也許是。 – Omnifarious

+0

另外,請注意例如在最近10分鐘內找到修改文件的-mmin -10 – sehe

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 "[email protected]"; 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 "[email protected]"; do fname="$(echo -ne "$fname")"; echo -n "$fname"; echo -ne "\0"; done' junk | xargs -0 rm -r 
0

您可以處理的文件和目錄在一個道次:

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

你可以看到什麼事情發生留下斷管「慶典」

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

處理與換行符的文件名,你需要更多的處理。

相關問題