我在 file1 中有一個名稱串列,它是我要洗掉的檔案的真實檔案名的子字串。我想洗掉與 file1 中的名稱部分匹配的檔案。知道如何指定要洗掉的檔案嗎?
檔案1:
file123
file313
file355
真實檔案:
file123.sam.out
file313.sam.out
file355.sam.out
file342455.sam.out
file34455.sam.out
要保留的檔案:
file342455.sam.out
file34455.sam.out
uj5u.com熱心網友回復:
假設您沒有任何包含換行文字的檔案名...
printf '%s\n' * | grep -Fvf file1 | xargs -d $'\n' rm -f --
讓我們一步一步來:
printf '%s\n' *生成當前目錄中的檔案串列。grep -Fvf file1從該串列中洗掉包含作為子字串的任何字串file1xargs -d $'\n' rm -f --在換行符上拆分其標準輸入,并將其作為引數傳遞給rm -f --
如果你有 GNU 工具(和一個 shell,比如 bash,支持行程替換),你可以使用 NUL 分隔符,從而使用所有可能的檔案名:
printf '%s\0' * |
grep -zFvf <(tr '\n' '\0' <file1) |
xargs -0 rm -f --
printf '%s\0' *在每個檔案名之后放置一個 NUL,而不是換行符。tr '\n' '\0' <file1使用 NUL 替換換行符發出 file1 的內容grep -zFvf將其輸入讀取為 NUL 分隔,并寫入 NUL 分隔的輸出,但其他行為如上。xargs -0 rm -f --讀取內容,在 NUL 上拆分,并將輸入作為引數傳遞給rm -f --.
uj5u.com熱心網友回復:
#!/bin/bash
PATTERN_FILE=file1
FILE_TO_REMOVE_FOLDER=files
cat $PATTERN_FILE | while read x
do
if [ "" != "$x" ]
then
echo "rm $FILE_TO_REMOVE_FOLDER/$x*"
rm $FILE_TO_REMOVE_FOLDER/$x*
fi
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/474192.html
上一篇:如何在類unix作業系統中的`which`之后管道`file`
下一篇:C#訪問堆疊物件屬性
