Tengo un archivo .txt con un conjunto de nombres de archivos y quería verificar la existencia de esos archivos en un directorio.
cat file list.txt
File1
File2
File3
Mi secuencia de comandos debería verificar si estos archivos existen en el directorio o no.
Respuesta1
En 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} )
La existencia en ese caso se determina leyendo el contenido de la $dir
ectoría, a la que es necesarioleerpermiso (no necesariamentebuscarpermiso).
Con cualquier shell tipo POSIX, también puedes hacer:
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"
Aquí, la existencia de búsqueda se determina utilizando la lstat()
llamada al sistema (o una variación de la misma) en los archivos mismos, para lo cual necesitabuscarpermiso a la $dir
ectoría, (no necesariamenteleerpermiso).