Если мой терминал в настоящее время находится в home/stuff/stuff2
и существует больше папок и файлов под stuff2
, как я могу запустить команду для получения имен файлов всех файлов и папок из этого каталога и вперед (Включая все подкаталоги).
Операция должна сделать следующее:
home/stuff/stuff2/stuff3/cat.png
Я предпочел бы, чтобы чтение было stuff3/cat.png
Какие-либо идеи?
Команда
find -printf "%P\n" > file
перечислит все файлы и каталоги ниже текущего каталога и перенаправление список к file
. От printf
раздел man find
%P File's name with the name of the command line argument
under which it was found removed.
В дополнение к find
, также возможно сделать это только с bash
оболочка:
shopt -s globstar
printf "%s\n" ** >file
Все имена выходного файла печатаются относительно текущего каталога.
shopt -s globstar
включает globstar
который дает bash
часть питания find
. С globstar
, две звезды подряд будут, как man bash
состояния, "соответствие все файлы и нуль или больше каталогов и подкаталогов". Здесь, printf
используется для форматирования имен файлов одних к строке. Вывод отправляется в названный текстовый файл file
.
Этот вопрос просит вывод в текстовом файле. Текстовым файлам обычно разделяли строки символы новой строки. Если какое-либо имя файла или каталога само будет содержать символ новой строки, то это приведет к беспорядку. Если не известно, что никакой такой файл не существует, лучше использовать разделенный от пустого указателя файл, не разделенный от новой строки текстовый файл.
В этом случае можно использовать:
printf "%s\000" ** >file
Или,
find -print0 >file
Так как nul символ (ASCII 000) никогда не позволяется в имени файла, это - один формат, который может использоваться для хранения имен файлов в файле без опасности потерять информацию.
Если можно обработать файл в форме "./dir/filename", то простая форма команды находки работала бы:
find . -type f > filename
передаст все файлы по каналу ниже текущего каталога в "имя файла".
После наблюдения ответа @steeldriver, комбинации его решения и мое устранило бы ". /" префикс, как так:
, Если Вы делаете не , хотят пустые имена каталогов в списке (т.е., просто имена файлов в каждом каталоге,
find -type f -printf "%P\n" > file
, Если Вы на самом деле делаете , хотят имена каталогов собой наряду с каталогом/именами файлов, затем опускают "-тип f" флаг от всех примеров.