Так что он не будет показывать каталоги, содержащие пустой файл с именем «0k», который я использую в качестве флага? Кажется, --exclude не может с этим справиться.
Если ваш пустой файл, действующий как флаг, называется 0k, следующая команда будет читать все подкаталоги в текущем каталоге, которые не содержат файл. Вы можете, конечно, изменить . в начале цикла for на любой путь к каталогу.
for dir in ./*; do if [[ ! -f "$dir"/'0k' ]]; then du -s "$dir" ; fi ; done
Вы не упомянули в своем вопросе, нужно ли вам, чтобы это было полностью рекурсивным, если это будет немного сложнее. Здесь можно найти команду find, каталог поиска можно изменить следующим образом:
find . -type d -exec bash -c 'if [[ ! -f "{}"/"0k" empty ]]; then du -s "{}"; fi' \;
Изменить: после выяснения задачи из OP, следующая команда должна работать.
for dir in Pictures/*/*; do if [[ ! -f "$dir"/'0k' ]]; then du -s "$dir" ; fi ; done | sort -nr | head -n50
Если каждая строка, которую вы хотите исключить, содержит определенную строку (например, имя файла), вы можете использовать grep для фильтрации результатов du.
Это будет использоваться как поэтому: du | grep -v -e "string_to_exclude". Аргумент -v для grep отменяет вывод так, чтобы отображались только несоответствия.
Если ваш пустой файл, действующий как флаг, называется 0k, следующая команда будет читать все подкаталоги в текущем каталоге, которые не содержат файл. Вы можете, конечно, изменить . в начале цикла for на любой путь к каталогу.
for dir in ./*; do if [[ ! -f "$dir"/'0k' ]]; then du -s "$dir" ; fi ; done
Вы не упомянули в своем вопросе, нужно ли вам, чтобы это было полностью рекурсивным, если это будет немного сложнее. Здесь можно найти команду find, каталог поиска можно изменить следующим образом:
find . -type d -exec bash -c 'if [[ ! -f "{}"/"0k" empty ]]; then du -s "{}"; fi' \;
Изменить: после выяснения задачи из OP, следующая команда должна работать.
for dir in Pictures/*/*; do if [[ ! -f "$dir"/'0k' ]]; then du -s "$dir" ; fi ; done | sort -nr | head -n50
Если каждая строка, которую вы хотите исключить, содержит определенную строку (например, имя файла), вы можете использовать grep для фильтрации результатов du.
Это будет использоваться как поэтому: du | grep -v -e "string_to_exclude". Аргумент -v для grep отменяет вывод так, чтобы отображались только несоответствия.
Если ваш пустой файл, действующий как флаг, называется 0k, следующая команда будет читать все подкаталоги в текущем каталоге, которые не содержат файл. Вы можете, конечно, изменить . в начале цикла for на любой путь к каталогу.
for dir in ./*; do if [[ ! -f "$dir"/'0k' ]]; then du -s "$dir" ; fi ; done
Вы не упомянули в своем вопросе, нужно ли вам, чтобы это было полностью рекурсивным, если это будет немного сложнее. Здесь можно найти команду find, каталог поиска можно изменить следующим образом:
find . -type d -exec bash -c 'if [[ ! -f "{}"/"0k" empty ]]; then du -s "{}"; fi' \;
Изменить: после выяснения задачи из OP, следующая команда должна работать.
for dir in Pictures/*/*; do if [[ ! -f "$dir"/'0k' ]]; then du -s "$dir" ; fi ; done | sort -nr | head -n50
Если каждая строка, которую вы хотите исключить, содержит определенную строку (например, имя файла), вы можете использовать grep для фильтрации результатов du.
Это будет использоваться как поэтому: du | grep -v -e "string_to_exclude". Аргумент -v для grep отменяет вывод так, чтобы отображались только несоответствия.