簡體   English   中英

除了linux終端中的一種類型之外,刪除某種類型的所有文件

[英]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存檔之外的每個文件。 我假設它是rmfile的某種組合,但我不確定確切的語法。

如果它適合你的參數列表並且沒有文件名包含冒號,那么帶有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM