我有一個帶有一組文件名的 .txt 文件,我想檢查目錄中這些文件是否存在。
cat file list.txt
File1
File2
File3
我的腳本應該檢查這些文件是否存在於目錄中。
答案1
在zsh
:
dir=/some/dir
list_file=/path/to/file.list
list=( ${(f)"$(<$list_file)"} )
existing=( $dir/*(ND:t) )
files_in_list_that_exist=( ${list:*existing} )
files_in_list_that_dont_exist=( ${list:|existing} )
在這種情況下,透過讀取內容來確定是否存在$dir
在這種情況下,存在是透過讀取您需要的 ectory讀許可(不一定搜尋允許)。
使用任何類似 POSIX 的 shell,您還可以執行以下操作:
while IFS= read -r file; do
if [ -e "$dir/$file" ] || [ -L "$dir/$file" ]; then
found=yes
else
found=no
fi
printf '%s\n' "$file: $found"
done < "$list_file"
在這裡,find 的存在是透過使用lstat()
檔案本身的系統呼叫(或其變體)來確定的,為此您需要搜尋的許可$dir
,(不一定讀允許)。