Linux

從文件和目錄列表中過濾目錄

  • January 15, 2018

我有一個文件,其中包含文件的完整路徑名和目錄。

從這個列表中,我想過濾掉任何引用目錄的路徑名,這樣我就得到了一個只包含文件路徑的列表。

誰能想到一個優雅的解決方案?

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"
  • 等等

引用自:https://unix.stackexchange.com/questions/417123