Список протоколов файлов и каталогов на du показывает только размеры каталогов?

Предположим, у меня есть каталог с несколькими подкаталогами, каждый из которых содержит некоторые файлы:

1/a.txt 1/b.txt 2/c.txt 2/d.txt 3/e.txt 3/f.txt 

Я хочу видеть размер каждого файла. Пожалуйста, имейте в виду, я знаю, что есть более простые и более прямые способы сделать это, например du -a . Я просто хочу знать, почему следующее не работает в образовательных целях.


Мои бессмысленные упражнения

Запуск find . возвращает список всех файлов и каталогов, поэтому я попытался выполнить его так:

 find . | xargs du 

но это просто возвращает размеры каталогов 1, 2 и 3. Мне не хватает некоторого понимания, потому что, по моему мнению, xargs должны отображать каждую строку вывода из find на вызов du .

Если вместо этого я использую:

 find . | xargs du -a 

то он работает как ожидалось, перечисляя размеры всех файлов и каталогов. Он также отлично работает, если я передаю ему только список файлов, используя параметр -type f , поэтому он имеет отношение к получению списка каталогов, смешанных с файлами.

Что тут происходит?

One Solution collect form web for “Список протоколов файлов и каталогов на du показывает только размеры каталогов?”

Что происходит, так это то, что xargs ставит (если может) все имена в одной командной строке, так что вы видите только одну команду, переданную в du . Затем du игнорирует имена файлов (как и следовало ожидать: файлы являются частью каталогов и не учитывают их дважды).

Если вы используете параметр -n 1 для xargs , он разделит команду вверх, и вы увидите что-то еще, как вы ожидаете.

  • Как заставить xargs играть хорошо с stdin?
  • отобразить результаты поиска
  • Как перемещаться по xargs, где каждый скрипт использует общую переменную env
  • Исправлен последний аргумент с xargs
  • Команда, которая печатает содержимое файла, указанное имя файла на stdin
  • вывод технологического процесса на команду split by line и whitespace
  • цикл через выход одной команды и использовать в другой команде
  • Как поддерживать порядок сортировки с помощью xargs и gunzip
  • xargs, записи и стандартный ввод
  • эхом basename под xargs?
  • Трубопровод нескольких строк в сценарии bash
  • Linux и Unix - лучшая ОС в мире.