2016-11-17 3 views
1

Я новый (иш) для использования Bash, и я пытаюсь понять, как объединить несколько разных вещей в один скрипт.Bash: Список каталогов с типом файла, но отсутствует файл другого типа

Я ищу передачи файлов, которые были прерваны. Эти папки содержат файлы изображений (или jpgs или png), но отсутствуют другой конкретный файл (готовый.txt).

Вот что я использую, чтобы найти папки с изображениями (из here):

for f in */incoming/ ; do 
    log_f="${f//\//}" 
    echo "searching $f" 
    find "$f" -iname "*jpg*" -o -iname "*png*" > "/output/${log_f}.txt" 
    echo "$f finished" 
done 

Тогда я бег этой команды, чтобы найти папки, которые отсутствуют файл finished.txt (от here):

find -mindepth 2 -maxdepth 2 -type d '!' -exec test -e "{}/finished.txt" ';' -print 

есть ли способ, чтобы объединить их, так что я список папок, которые имеют JPG или PNG файлов, но не имеют finished.txt? Кроме того, если я хочу добавить -mtime, где я могу это поставить?

В качестве альтернативы, если есть лучший/более быстрый способ сделать это, я тоже заинтересован в этом.

Спасибо!

ответ

0

С первого прохода, когда вы получаете файлы с jpg/png, вы можете получить каталог с помощью dirname. Затем список каталогов можно использовать для итерации и поиска файла final.txt. При поиске вы можете пропустить каталог, если не распечатаете его.

Что-то, как показано ниже, должны сделать потребного

for i in `find "$f" -iname "*jpg*" -o -iname "*png*" -exec dirname {} \;` 
do 
    ls $i | grep finished >/dev/null 
    if [ $? -eq 1 ]; then 
     echo $i 
    fi 
done 

Добавить «| сортировать | уник» в конце команды найти, чтобы, возможно, удалить дубликаты. Что-то вроде

находки "$ F" -iname "JPG" -o -iname "PNG" -exec имя_директории {} \; | сортировать | uniq

+0

Спасибо за это. По какой-то причине я получаю это: 'find: '': Нет такого файла или каталога' – Amy

+0

Надеюсь, вы настроите f, который параметризуется в приведенной выше команде« $ f ». Итак, что-то вроде f =/Users/guest/mydirectory, а затем выполните приведенную выше команду. –