2013-06-26 138 views
3

如何使用find來識別那些不包含具有指定名稱的文件的目錄?我想創建一個文件,其中包含缺少某個文件的所有目錄的列表。Unix找到丟失文件的目錄

+0

This *可能*(我不確定)更適合[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)。 – michaelb958

回答

2

查找目錄:

find -type d > DIRS 

查找與該文件目錄:

find -type f -name 'SpecificName' | sed 's!/[^/]*$!!' > FILEDIRS 

找到差異:

grep DIRS -vf FILEDIRS 
+0

'find -type f -name「SpecificName」-exec dirname {} \; | uniq'使用這個非常簡單的方法來提取包含該文件的唯一dirname。對目錄使用相同的技巧。 –

+0

如果目錄列表很長(例如> 10000)以加快速度,請使用'grep -F'或'fgrep'。 – Heiko

0

這是一個文件main.cpp的一個例子。在這個例子中找到了所有不包含main.cpp的目錄。正如你看到的我第一次得到的所有文件夾列表,然後得到一個文件夾列表具有main.cpp中,然後運行diff拿到兩個列表之間的差異:

diff \ 
    <(find . -exec readlink -f {} \; | sed 's/\(.*\)\/.*$/\1/' | sort | uniq) \ 
    <(find . -name main.cpp -exec readlink -f {} \; | sed 's/\(.*\)\/.*$/\1/' | sort | uniq) \ 
    | sed -n 's/< \(.*\)/\1/p' 
1

有相當多的不同的方法能去這一點 - 這裏是我採取的辦法(bash假設):

while read d 
do 
    [[ -r ${d}/SpecificFile.txt ]] || echo ${d} 
done < <(find . -type d -print) 

如果目標目錄只在一定的深度存在,還有你可以添加到find其他選項目錄的數量限制檢查...