Получение списка поврежденных файлов из папки и ее подпапки

правильный синтаксис:

awk 'END {print ARGC}' file1 ... filen 

имейте в виду, что должен быть указан

  • файл (elase awk будет ждать ввода в stdin
  • сам awk считается как один в ARGC

, чтобы получить номер файла

awk 'END {print ARGC-1}' file1 ... filen

, бесконечный цикл

(это должно быть случайностью, так как ничто не дает подсказки относительно того, почему)

предположим, что вы пишете

 foobar="/my/path1 /other/path2"
 C=$(awk 'END{ print ARGC-1}' $fobar)

, вы, вероятно, пойдете в бесконечном цикле / ожидании для стандартного ввода, когда вы неправильно пишете $ foobar как $ fobar .

2
08.06.2016, 08:55
2 ответа

Просто используйте find с -exec :

find . -name '*bz2' -exec sh -c 'bzip2 -t "$0" 2>/dev/null || echo "$0 is corrupted"' {} \;

From man find :

  -exec command ;
          Execute  command;  true  if 0 status is returned.  All following
          arguments to find are taken to be arguments to the command until
          an  argument  consisting of `;' is encountered.  The string `{}'
          is replaced by the current file name being processed  everywhere
          it occurs in the arguments to the command [...]

Итак, приведенная выше команда find , будет искать все файлы, заканчивающиеся на bz2 , и запускать небольшой скрипт sh для каждого из них. {} заменяется каждым найденным именем файла. Он передается в качестве 1-го параметра ( $ 0 ) сценарию sh , который запускает на нем bzip -t и жалуется в случае сбоя. 2> / dev / null отбрасывает любые другие сообщения об ошибках, чтобы все было в порядке.


В качестве альтернативы можно использовать оболочку. Если вы используете bash , включите параметр globstar , чтобы ** рекурсивно переходил в подкаталоги и проверял каждый файл bzip:

shopt -s globstar
for file in folder/**/*bz; do bzip2 -t "$file" || echo "$file is corrupted"; done
2
27.01.2020, 22:11

Используйте приведенный ниже сценарий.

cd folder
find -name "*.bz2" > bzipfiles
for i in `cat bzipfiles`
do
    bzip2 -t $i
    if [ $? == '0']
    then
        echo "$i file is not corrupted"
    else
        echo "$i file is corrupted"
        echo "$i" >> corruptedfile_list
    fi
done

Найдите поврежденный список файлов в correptedfile_list .

0
27.01.2020, 22:11

Теги

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