#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, поэтому добавляю в качестве ответа)