Если мой терминал в настоящий момент находится в home/stuff/stuff2, а в папке stuff2 есть больше папок и файлов, как я могу запустить команду, чтобы получить имена файлов всех файлов и папок из этого каталога и далее (включая все суб-файлы каталоги).
Операция должна выполнять следующее:
Путь к файлу должен начинаться с местоположения команды терминала, поэтому мне не нужны полные пути к файлам. Например, вместо чтения home/stuff/stuff2/stuff3/cat.png я предпочел бы, чтобы чтение было stuff3/cat.png Оно должно захватывать каждый файл, папку и файлы в этих папках. Он должен быть передан (я думаю, что это термин) в текстовый файл.Любые идеи?
В дополнение к find, это также возможно сделать только с помощью оболочки bash:
shopt -s globstar
printf "%s\n" ** >file
Все имена выходных файлов печатаются относительно текущего каталога. [!d1 ]
shopt -s globstar позволяет globstar, что дает bash некоторую степень find. С помощью globstar две звезды подряд будут, как указано в man bash, «сопоставлять все файлы и нулевые или более каталоги и подкаталоги». Здесь printf используется для форматирования имен файлов по одной строке. Вывод отправляется в текстовый файл с именем file.
Этот вопрос запрашивает вывод в текстовом файле. Текстовые файлы обычно имеют строки, разделенные символами новой строки. Если любое имя файла или каталога содержит символ новой строки, это приведет к путанице. Если не известно, что такого файла нет, лучше использовать файл с нулевым разделом, а не текстовый файл, разделенный символом новой строки.
В этом случае можно использовать:
printf "%s\000" ** >file
Или
find -print0 >file
Поскольку символ nul (ascii 000) никогда не разрешен в имени файла, это тот формат, который может использоваться для хранения имен файлов в файле без опасности теряя информацию.
Если вы можете обрабатывать файл в форме «./dir/filename», тогда будет работать простая форма команды find: find . -type f > filename будет передавать все файлы под текущим каталогом в «filename».
После просмотра ответа @ steeldriver комбинация его решения и моей проблемы устранит префикс «./», например:
Если вам не нужны пустые имена каталогов в списке (т. е. просто имена файлов в каждом каталоге, find -type f -printf "%P\n" > file
Если вы на самом деле не хотите сами имена каталогов вместе с каталогом / именами файлов, то опустите флаг «-type f» из всех примеров.