Verifique se existem arquivos em uma lista de arquivos em um determinado diretório

5

Os argumentos de tempo de execução são os seguintes: $ 1 é o caminho para o arquivo que contém a lista de arquivos $ 2 é o caminho para o diretório que contém os arquivos O que eu quero fazer é verificar se cada arquivo listado em $ 1 existe no diretório $ 2

Estou pensando em algo como:

for f in 'cat $1'
do
if (FILEEXISTSIN$2DIRECTORY)
then echo '$f exists in $2'
else echo '$f is missing in $2' sleep 5 exit
fi
done

Como você pode ver, quero que, se algum dos arquivos listados em $1 não existir no diretório $2 , o script declare isso e feche. A única parte que não consigo entender é a parte (FILEEXISTSIN$2DIRECTORY) . Eu sei que você pode fazer [ -e $f ] , mas eu não sei como você pode ter certeza de verificar se ele existe no diretório $2 .

    
por user29772 05.01.2013 / 18:07

3 respostas

5

A melhor maneira de iterar as linhas em um arquivo é usar o read integrado em um loop while. É isso que você está procurando:

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"
    
por 05.01.2013 / 18:12
6

O modo de shell , você o escreveria:

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

(assumindo um shell com suporte para substituição de processos como ksh, zsh ou bash)

    
por 05.01.2013 / 19:02
0
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
    
por 26.06.2014 / 00:51