Проверьте, существуют ли файлы в списке файлов в определенном каталоге

grep требует, чтобы четыре обратных косых черты представили обратную косую черту:

grep "\\\\resources\\\\"
6
26.08.2018, 00:44
3 ответа

Лучший способ выполнить итерации по строкам в файле использует 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"
6
27.01.2020, 20:22
  • 1
    Спасибо, я еще действительно не использовал циклы с условием продолжения или функцию чтения, таким образом, я буду играть вокруг с этим. –  user29772 05.01.2013, 19:16
  • 2
  • 3
    IFS = часть, необходимая, если файлы в списке просто разделяются пробелом (имена файлов не содержат пробелов :)) –  user29772 05.01.2013, 19:46
  • 4
    Помещение его более разумным способом, опуская IFS= только необходимо, когда Вы хотите, чтобы начальные и конечные пробелы были разделены с начала и конца считанных строк. Не имеет никакого смысла опускать его иначе. –  Stéphane Chazelas 05.01.2013, 20:04

Оболочка путь, Вы записали бы это:

comm -23 <(sort -u < "$1") <(ls -- "$2")

(принятие оболочки с поддержкой замены процесса как ksh, zsh или удар)

comm команда, которая сообщает об общих строках между двумя отсортированными файлами. Это отображается, находится в разделенных столбцах 3 вкладок:

  1. строки только в первом файле
  2. строки только во втором файле
  3. строки, характерные для обоих файлов

И можно передать -1, -2, и -3 опции удалить соответствующий столбец.

Таким образом выше, это только сообщит о первом столбце: строки, которые находятся в списке файлов, но не в выводе ls (ls действительно сортирует список файлов по умолчанию, мы предполагаем, что имена файлов там не содержат символы новой строки).

9
27.01.2020, 20:22
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
0
27.01.2020, 20:22

Теги

Похожие вопросы