Я хочу рекурсивно отсортировать все файлы в настоящем напрямую.
Я пытался ls -lh -R |sort >> output.txt
. Но я думаю, что проблема многопоточности создает проблему, до завершения вывода ls -lh -R
сортировка начала делать свою работу.
Теперь я получаю неправильный ответ. Как я могу сделать это правильно.
Я пытался: ОТВЕТИТЬ НА ЭТОТ ВОПРОС
Нет ничего общего с многопоточностью. После того, как ls
завершит свою задачу, все выходные данные будут отправлены на sort
, никогда ранее.
Более подробное объяснение:
Канал Unix соединяет файловый дескриптор STDOUT (стандартный вывод) первого процесса с STDIN (стандартный ввод) второго. Затем происходит то, что , когда первый процесс записывает в свой STDOUT, этот вывод может быть немедленно считан (из STDIN) вторым процессом .
Использование нескольких труб ничем не отличается от использования одной трубы. Каждый канал независим и просто связывает STDOUT и STDIN смежных процессов.
[...] каналы, как таковые, согласованы везде в скрипте bash.
blockquote>Источник: Какое простое объяснение того, как работают каналы в BASH?
Итак, я почти уверен, что
ls -lh -R |sort >> output.txt
он работает как шарм. Кроме того, я протестировал свою систему в каталоге/
, и она работала правильно с файлами и каталогами 1.597.396 (конечно, мне пришлось немного подождать).
Если вам нужен алфавитный порядок после имен файлов только , не используйте
ls
с аргументом-l
. Если вы не хотите видеть все пустые строки, используйте сортировку с аргументом-u
. Итак, в целом, вы должны использовать:ls -h -R |sort -u >> output.txt
См.
man ls
иman sort
для большего количества вариантов или для лучшего понимания.
Попробуйте использовать 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