2012-09-06 24 views
3

在運行Ubuntu的計算機上,我有一個文件夾全是數百個文件,全部命名爲「index.html.n」,其中n從1開始並繼續向上。其中一些文件是實際的html文件,一些是圖像文件(png和jpg),其中一些是zip文件。刪除linux終端中除某一類型以外的所有文件

我的目標是永久刪除除zip壓縮文檔以外的每個文件。我認爲這是rmfile的組合,但我不確定確切的語法。

+0

是否也命名爲'index.html.n'的壓縮文件? – perreal

+0

是的,他們都分享這個名字。我相信'file'命令會告訴你它實際是哪種類型,我只是不確定如何使用這些信息。 – BenjaminRH

+0

[刪除在Linux中沒有以下擴展名的所有文件]的可能的重複(http://stackoverflow.com/questions/8642211/remove-all-files-that-does-not-have-the-following-extensions -in Linux的) –

回答

2

如果它適合你的參數列表,並沒有文件名包含結腸xargs一個簡單的管道應該做的:

file * | grep -vi zip | cut -d: -f1 | tr '\n' '\0' | xargs -0 rm 
1

第一個find找到匹配的文件,然後file獲取文件類型。 sed消除了其他文件類型,並且還從file的輸出中除去了所有文件名。最後,rm刪除:

find -name 'index.html.[0-9]*' | \     
    xargs file | \         
     sed -n 's/\([^:]*\): Zip archive.*/\1/p' | 
     xargs rm 
1

我會跑:

for f in in index.html.* 
do 
    file "$f" | grep -qi zip 
    [ $? -ne 0 ] && rm -i "$f" 
done 

並刪除-i選項如果您覺得足夠自信

0
for i in index.html.* 
do 
    $type = file $i; 
    if [[ ! $file =~ "Zip" ]] 
    then 
     rm $file 
    fi 
done 

rm更改爲ls用於測試目的。

1

下面是我使用的方法;它不是完全自動化的,但比其他方法更容易出錯。

file * > cleanup.sh 

file index.html.* > cleanup.sh 

這生成的所有文件(不含點文件)的列表,或所有index.html.*文件,在當前目錄中,並寫入列表cleanup.sh

使用您喜歡的文本編輯器(我正好是VIM),編輯cleanup.sh

  • 添加#!/bin/sh作爲一線
  • 刪除包含字符串「Zip archive
  • 在每一行的所有行,刪除從:到行尾的所有內容(在vim中,01​​)
  • 用「rm」替換每行的開始,後跟sp王牌

退出編輯器,更新文件。

chmod +x cleanup.sh 

您現在應該有一個shell腳本,它將刪除zip文件以外的所有內容。

運行前仔細檢查腳本。注意錯別字,以及名稱包含shell元字符的文件。您可能需要爲文件名添加引號。

(請注意,如果你這樣做,因爲單行shell命令,你沒有機會檢查你要刪除之前,你實際上刪除的文件列表。)

一旦您滿意您的腳本是否正確,請從您的shell提示符下運行

./cleanup.sh 

相關問題