grep
требует, чтобы четыре обратных косых черты представили обратную косую черту:
grep "\\\\resources\\\\"
Лучший способ выполнить итерации по строкам в файле использует read
встроенный в некоторое время цикле. Это - то, что Вы ищете:
while IFS= read -r f; do
if [[ -e $2/$f ]]; then
printf '%s exists in %s\n' "$f" "$2"
else
printf '%s is missing in %s\n' "$f" "$2"
exit 1
fi
done < "$1"
Оболочка путь, Вы записали бы это:
comm -23 <(sort -u < "$1") <(ls -- "$2")
(принятие оболочки с поддержкой замены процесса как ksh, zsh или удар)
comm
команда, которая сообщает об общих строках между двумя отсортированными файлами. Это отображается, находится в разделенных столбцах 3 вкладок:
И можно передать -1
, -2
, и -3
опции удалить соответствующий столбец.
Таким образом выше, это только сообщит о первом столбце: строки, которые находятся в списке файлов, но не в выводе ls
(ls
действительно сортирует список файлов по умолчанию, мы предполагаем, что имена файлов там не содержат символы новой строки).
echo "Inquire if each file of a file list exists in a specific directory"
foundc=0
nfoundc=0
fflist=""
nflist=""
DIR_A='./my_directory' # address directory used as target of searching
FILELIST='./file_list.txt' # file with: list of file names to search
### echo "for file in $FILELIST"
exec 3< $FILELIST # associa lista_arquivos ao descritor 3
while read file_a <&3; do
if [[ -s "$DIR_A/${file_a}" ]];then # file is found and is > 0 bytes.
foundc=$((foundc + 1))
fflist=" ${fflist} ${file_a}"
## echo '...file ' "${file_a}" 'was found...'
else # file is not found or is 0 bytes
nfoundc=$((nfoundc + 1))
nflist=" ${nflist} ${file_a}"
echo '...file ' "${file_a}" 'was not found...'
fi
done
exec 3<&- # libera descritor 3
echo "List of found files: " "${fflist}" "
echo "List of NOT found files: " "${nflist}" "
echo "Number of files in "[$FILELIST]" found = [${foundc}] "
echo "Number of files in "[$FILELIST]" NOT found = [${nfoundc}] "
exit
IFS=
только необходимо, когда Вы хотите, чтобы начальные и конечные пробелы были разделены с начала и конца считанных строк. Не имеет никакого смысла опускать его иначе. – Stéphane Chazelas 05.01.2013, 20:04