[英]In Linux terminal, how to delete all files in a directory except one or two
[英]Remove all files of a certain type except for one type in linux terminal
在我運行Ubuntu的計算機上,我有一個包含數百個文件的文件夾,全部名為“index.html.n”,其中n從1開始並繼續向上。 其中一些文件是實際的html文件,一些是圖像文件(png和jpg),其中一些是zip文件。
我的目標是永久刪除除zip存檔之外的每個文件。 我假設它是rm
和file
的某種組合,但我不確定確切的語法。
如果它適合你的參數列表並且沒有文件名包含冒號,那么帶有xargs
的簡單管道應該:
file * | grep -vi zip | cut -d: -f1 | tr '\n' '\0' | xargs -0 rm
首先find
匹配文件,然后找到file
以獲取文件類型。 sed
消除了其他文件類型,並且除了文件輸出中的file
名之外還刪除了所有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選項
這是我使用的方法; 它不是完全自動化的,但它比其他一些方法更不容易出錯。
file * > cleanup.sh
要么
file index.html.* > cleanup.sh
這將生成當前目錄中所有文件(不包括點文件)或所有index.html.*
文件的列表,並將列表寫入cleanup.sh
。
使用你最喜歡的文本編輯器(我的vim),編輯cleanup.sh
:
#!/bin/sh
作為第一行 Zip archive
”的所有行 :
到行尾的所有內容(在vim中:%s/:.*$//
) rm
”替換每行的開頭,后跟空格 退出編輯器,更新文件。
chmod +x cleanup.sh
您現在應該有一個shell腳本,它將刪除除zip文件之外的所有內容。
在運行之前仔細檢查腳本。 請注意拼寫錯誤,以及名稱中包含shell元字符的文件。 您可能需要在文件名中添加引號。
(請注意,如果您將此作為單行shell命令執行,則在實際刪除它們之前,您無法檢查要刪除的文件列表。)
一旦您對腳本正確感到滿意,請運行
./cleanup.sh
從你的shell提示符。
for i in index.html.*
do
$type = file $i;
if [[ ! $file =~ "Zip" ]]
then
rm $file
fi
done
將rm
更改為ls
以進行測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.