Я придумал команду для поиска файлов и печати их размеров с помощью find, xargs и du. У меня проблема, когда я ищу что-то, чего не существует. Используя метод xargs, du сообщает обо всех папках, когда чего-то не существует, но я ожидаю, что он ничего не сообщит, потому что ничего не должно быть найдено. При использовании метода -exec он работает правильно, но из того, что я читал и наблюдал в больших поисковых запросах, он менее эффективен, поскольку он повторяет команду du для каждого найденного файла, а не работает в группе найденных файлов. См. Раздел, где упоминается -delete: http://content.hccfl.edu/pollock/unix/findcmd.htmТрубопровод пустой результат поиска до дюрала xargs приводит к неожиданному поведению
Вот пример. Во-первых, это то, что в каталогах:
ls
bar_dir/ test1.foo test2.foo test3.foo
ls bar_dir
test1.bar test2.bar test3.bar
Вот два поиска, где я ожидаю, чтобы найти результаты:
find . -name '*.foo' -type f -print0 | xargs -0 du -h
4.0K ./test2.foo
4.0K ./test1.foo
4.0K ./test3.foo
find . -name '*.bar' -type f -print0 | xargs -0 du -h
4.0K ./bar_dir/test1.bar
4.0K ./bar_dir/test2.bar
4.0K ./bar_dir/test3.bar
Здесь это поиск, в котором я не ожидаю результатов, но вместо этого я получить список каталогов:
find . -name '*.qux' -type f -print0 | xargs -0 du -h
16K ./bar_dir
32K .
Если я просто использовать найти, она ничего не возвращает (как и ожидалось)
find . -name '*.qux' -print0
И если я использую -exec метод дю, он также ничего не возвращает (как и ожидалось)
find . -name '*.qux' -type f -exec du -h '{}' \;
так что это дело с помощью метода xargs du, когда find ничего не находит? Спасибо за ваше время.
Это работает с небольшим редактирования ... Добавить пробел между '-i' и' {} ' : 'найти. -name '* .qux' -type f -print0 | xargs -0 -I {} du -h {} 'Спасибо! В качестве побочного примечания я попробовал свой исходный код без '-print0' и' -0', и каталоги все еще были возвращены. Этот код: 'find. -name '* .qux' -type f -print | xargs du -h' все еще не работает. –
@mixed_signals: Извините, пост отредактирован для лучшего решения IMO – grebneke
Это также работает: 'find. -name '* .qux' -type f -print0 | du -h -files0-from -' Я прочитаю эти два решения. Еще раз спасибо! –