У меня есть файл .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
, к которому вы должнычитатьразрешение (не обязательнопоискразрешение).
В любой оболочке типа POSIX вы также можете сделать следующее:
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
посещение церкви (не обязательно)читатьразрешение).