2016-01-05 57 views
2

我有一個文本文件a.txt的列表中存在的文件列表:如何讓不從包含的文件列表文件

photo/a.jpg 
photo/b.jpg 
photo/c.jpg 
etc 

我想獲得的文件的列表不存在。

+1

oneliner'xargs -n1 -I {} bash -c「[[!-e {}]] && echo {}」< a.txt > b.txt'。 – alvits

回答

4

您可以使用:

xargs -I % bash -c '[[ ! -e $1 ]] && echo "$1"' _ % <a.txt> b.txt 

xargs將在a.txt運行bash -c每一行。 [[ ! -e $1 ]]將檢查每個條目是否不存在。

+1

太棒了,謝謝。然後把它放到一個文件中(因爲我正在檢查40k文件並且輸出將會很長),我只需要在該命令上附加'> b.txt',對吧? – User

+1

是的,這是正確的,'cat a.txt | xargs -I%bash -c'[[! -e $ 1]] && echo「$ 1」'_%> b.txt' – anubhava

+1

'_'是什麼意思? – hek2mgl

2

不需要涉及cat,或者爲文件中的每一行調用單獨的shell;一個簡單的while read循環就足夠了:

while read -r file 
do 
    [ -e "$file" ] || echo "$file" 
done < a.txt 

逐行讀一行。測試每個文件是否存在,如果不存在,則輸出其名稱。

就像使用<將輸入傳遞到循環一樣,可以使用> out.txt將循環的輸出寫入文件。

相關問題