在運行Ubuntu的計算機上,我有一個文件夾全是數百個文件,全部命名爲「index.html.n」,其中n從1開始並繼續向上。其中一些文件是實際的html文件,一些是圖像文件(png和jpg),其中一些是zip文件。刪除linux終端中除某一類型以外的所有文件
我的目標是永久刪除除zip壓縮文檔以外的每個文件。我認爲這是rm
和file
的組合,但我不確定確切的語法。
在運行Ubuntu的計算機上,我有一個文件夾全是數百個文件,全部命名爲「index.html.n」,其中n從1開始並繼續向上。其中一些文件是實際的html文件,一些是圖像文件(png和jpg),其中一些是zip文件。刪除linux終端中除某一類型以外的所有文件
我的目標是永久刪除除zip壓縮文檔以外的每個文件。我認爲這是rm
和file
的組合,但我不確定確切的語法。
如果它適合你的參數列表,並沒有文件名包含結腸xargs
一個簡單的管道應該做的:
file * | grep -vi zip | cut -d: -f1 | tr '\n' '\0' | xargs -0 rm
第一個find
找到匹配的文件,然後file
獲取文件類型。 sed
消除了其他文件類型,並且還從file
的輸出中除去了所有文件名。最後,rm
刪除:
find -name 'index.html.[0-9]*' | \
xargs file | \
sed -n 's/\([^:]*\): Zip archive.*/\1/p' |
xargs rm
我會跑:
for f in in index.html.*
do
file "$f" | grep -qi zip
[ $? -ne 0 ] && rm -i "$f"
done
並刪除-i選項如果您覺得足夠自信
for i in index.html.*
do
$type = file $i;
if [[ ! $file =~ "Zip" ]]
then
rm $file
fi
done
將rm
更改爲ls
用於測試目的。
下面是我使用的方法;它不是完全自動化的,但比其他方法更容易出錯。
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
。
是否也命名爲'index.html.n'的壓縮文件? – perreal
是的,他們都分享這個名字。我相信'file'命令會告訴你它實際是哪種類型,我只是不確定如何使用這些信息。 – BenjaminRH
[刪除在Linux中沒有以下擴展名的所有文件]的可能的重複(http://stackoverflow.com/questions/8642211/remove-all-files-that-does-not-have-the-following-extensions -in Linux的) –