Linux
從文件和目錄列表中過濾目錄
我有一個文件,其中包含文件的完整路徑名和目錄。
從這個列表中,我想過濾掉任何引用目錄的路徑名,這樣我就得到了一個只包含文件路徑的列表。
誰能想到一個優雅的解決方案?
while IFS= read -r file; do [ -d "$file" ] || printf '%s\n' "$file" done <input_file
將列印未確定為目錄類型的文件(或目錄的符號連結)。它會留下所有其他類型的文件(正常、符號連結(目錄除外)、套接字、管道……)以及無法確定類型的文件(例如,因為它們不存在或位於您不存在的目錄中) ‘沒有搜尋權限)。
一些變化取決於您對文件和目錄的含義(目錄是 Unix 上許多類型的文件之一):
- 該文件存在(在符號連結解析之後)並且不是目錄類型:
[ -e "$file" ] && [ ! -d "$file" ] && printf '%s\n' "$file"
- 文件存在並且是正常文件(在符號連結解析之後):
[ -f "$file" ] && printf '%s\n' "$file"
- 文件存在並且是符號連結解析之前的正常文件(不包括符號連結):
[ -f "$file" ] && [ ! -L "$file" ] && printf '%s\n' "$file"
- 等等