Команда UNIX для списка папок с количествами файла

SQLite не поддерживает это расширение для стандартного SQL - вам нужно использовать оба оператора, сначала SELECT, DELETE next. Конечно, вы можете обернуть их в транзакции (инструкции BEGIN и COMMIT до и после этого гарантируют), чтобы гарантировать атомарность и согласованность.

18
задан DisgruntledGoat 10 March 2009 в 01:56
поделиться

4 ответа

Я придумал этого:

find -maxdepth 1 -type d | while read dir; do 
    count=$(find "$dir" -maxdepth 1 -iname \*.jpg | wc -l)
    echo "$dir ; $count"
done

Отбрасывание второе -maxdepth 1, если поиск в рамках каталогов для jpg файлов должен быть рекурсивными подкаталогами рассмотрения. Обратите внимание, что это только рассматривает название файлов. Вы могли переименовать файл, скрывая это это - jpg изображение. Можно использовать эти file команда, чтобы сделать предположение на содержании, вместо этого (теперь, также поиски рекурсивно):

find -mindepth 1 -maxdepth 1 -type d | while read dir; do 
    count=$(find "$dir" -type f | xargs file -b --mime-type | 
            grep 'image/jpeg' | wc -l)
    echo "$dir ; $count"
done

Однако, который намного медленнее, так как это должно считать часть файлов и в конечном счете интерпретировать то, что они содержат (если это удачно, это находит волшебный идентификатор в начале файла). Эти -mindepth 1 препятствует тому, чтобы он печатал . (текущий каталог) как другой каталог, который это ищет.

21
ответ дан 30 November 2019 в 07:04
поделиться

мой быстрее для ввода из командной строки.:)

другие предложения предлагают какое-либо реальное преимущество перед следующим?

find -name '*.jpg' | wc -l               # recursive


find -maxdepth 1 -name '*.jpg' | wc -l   # current directory only
8
ответ дан 30 November 2019 в 07:04
поделиться
#!/bin/bash
for dir in `find . -type d | grep -v "\.$"`; do
echo $dir
ls $dir/*.jpg | wc -l
done;
1
ответ дан 30 November 2019 в 07:04
поделиться

Можно сделать это без внешних команд:

for d in */; do 
  set -- "$d"*.jpg
  printf "%s: %d\n" "${d%/}" "$#"
done

Или можно использовать awk ( nawk или /usr/xpg4/bin/awk на Солярис ):

printf "%s\n" */*jpg |
  awk -F\/ 'END { 
    for (d in _) 
      print d ":",_[d] 
      }
  { _[$1]++ }'
1
ответ дан 30 November 2019 в 07:04
поделиться