Проблема IN, передающая вывод одной команды другой

Я хочу рекурсивно отсортировать все файлы в настоящем напрямую.

Я пытался ls -lh -R |sort >> output.txt. Но я думаю, что проблема многопоточности создает проблему, до завершения вывода ls -lh -R сортировка начала делать свою работу.
Теперь я получаю неправильный ответ. Как я могу сделать это правильно.
Я пытался: ОТВЕТИТЬ НА ЭТОТ ВОПРОС

1
задан 13 April 2017 в 15:23

2 ответа

Нет ничего общего с многопоточностью. После того, как ls завершит свою задачу, все выходные данные будут отправлены на sort, никогда ранее.

Более подробное объяснение:

Канал Unix соединяет файловый дескриптор STDOUT (стандартный вывод) первого процесса с STDIN (стандартный ввод) второго. Затем происходит то, что , когда первый процесс записывает в свой STDOUT, этот вывод может быть немедленно считан (из STDIN) вторым процессом .

Использование нескольких труб ничем не отличается от использования одной трубы. Каждый канал независим и просто связывает STDOUT и STDIN смежных процессов.

[...] каналы, как таковые, согласованы везде в скрипте bash.

Источник: Какое простое объяснение того, как работают каналы в BASH?

Итак, я почти уверен, что ls -lh -R |sort >> output.txt он работает как шарм. Кроме того, я протестировал свою систему в каталоге /, и она работала правильно с файлами и каталогами 1.597.396 (конечно, мне пришлось немного подождать).


Если вам нужен алфавитный порядок после имен файлов только , не используйте ls с аргументом -l. Если вы не хотите видеть все пустые строки, используйте сортировку с аргументом -u. Итак, в целом, вы должны использовать:

ls -h -R |sort -u >> output.txt

См. man ls и man sort для большего количества вариантов или для лучшего понимания.

0
ответ дан 13 April 2017 в 15:23

Попробуйте использовать find вместо ls -R, например, найти все файлы размером> 100 МБ в текущем каталоге и его подкаталогах, а затем отсортировать их по размеру (удобочитаемому для человека) и перечислить самые большие 10

find . -size +100M -exec du -hd 1 {} \; | sort -hr | head -10

или (чуть более надежные)

 while read -rd \0' file; do du -h "$file"; done < <(find . -size +100M -print0) | sort -hr | head -10
0
ответ дан 13 April 2017 в 15:23

Другие вопросы по тегам:

Похожие вопросы: