Рекурсивный отсортированный список файлов (Linux)

#linux #file #find

#linux #файл #Найти

Вопрос:

Я хочу выполнить рекурсию по каталогу, в том числе в подкаталогах и подкаталогах этих и так далее, распечатывая ТОЛЬКО имена файлов (без каталогов). Я также хотел бы, чтобы результаты отображались в каждой новой строке и сортировались.

Пожалуйста, обратите внимание, что ls -LR or ls -xLR не работает, так как ls форматирует результат в виде таблицы.

Ребята, если вы можете отредактировать его, у вас есть какие-либо предложения?

Ответ №1:

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

 find . -type f -exec basename {} ; | sort
  

Сортировка по имени, только имена файлов (без путей) и только файлы (без каталогов).


Подробные сведения:

  • find по умолчанию работает рекурсивно.
  • -type f будут печататься только файлы, а не каталоги.
  • -exec basename выполняется basename с результатами (поэтому пути не печатаются).
  • sort будет сортировать результаты (Ого!)

Комментарии:

1. @Джек, да, это так. Вы пробовали это? Я надеюсь, что это поможет 🙂

2. ладно, оказывается, у меня есть несколько файлов в разных каталогах с одинаковыми именами, так что относительные пути, в конце концов, хороши. удаление ‘-exec basename {} ;’, похоже, не делает того, что я хочу.

3. @Jack, если ты хочешь сохранить относительные пути, просто сделай find . -type f | sort

4. хорошо, но что означает символ «./»? разве это не команда запуска? (последний вопрос, я обещаю)

5. @jim 1, но . это избыточно и -printf '%fn' было бы быстрее / лучше, чем -exec basename {} ; избегать подоболочек и посторонних команд.

Ответ №2:

Как насчет утилит поиска и сортировки?

 find <dir> -type f |sort
  

Комментарии:

1. он говорит find: f: нет такого файла или каталога

2. @Jack, измените <dir> на реальный каталог, например . или $HOME

Ответ №3:

Это должно сработать. Вы сделали опечатку? Какая версия Linux у вас есть? Смотрите пример ниже

 testserver:~ # find /etc -type f | sort
/etc/.pwd.lock
/etc/DIR_COLORS
/etc/HOSTNAME
/etc/Muttrc 
....
....
/etc/zmd/zmd.conf
/etc/zshenv
/etc/zshrc
/etc/zypp/zypp.conf
testserver:~ #
  

(p.s. извините, пытался добавить в качестве комментария, но моя репутация не 50, поэтому добавляю в качестве ответа)