Получите все пути к файлам от определенного момента и канала к текстовому файлу

Если мой терминал в настоящее время находится в home/stuff/stuff2 и существует больше папок и файлов под stuff2, как я могу запустить команду для получения имен файлов всех файлов и папок из этого каталога и вперед (Включая все подкаталоги).

Операция должна сделать следующее:

  1. Путь к файлу должен запуститься в местоположении терминальной команды, таким образом, я не хочу все пути файлов. Пример, вместо чтения, являющегося home/stuff/stuff2/stuff3/cat.png Я предпочел бы, чтобы чтение было stuff3/cat.png
  2. Это должно получить каждый файл и папку и файлы в тех папках.
  3. Это должно быть передано по каналу (я думаю, что это - термин) к текстовому файлу.

Какие-либо идеи?

0
задан 15 November 2014 в 04:49

3 ответа

Команда

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.
2
ответ дан 6 October 2019 в 20:28

В дополнение к 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) никогда не позволяется в имени файла, это - один формат, который может использоваться для хранения имен файлов в файле без опасности потерять информацию.

2
ответ дан 6 October 2019 в 20:28

Если можно обработать файл в форме "./dir/filename", то простая форма команды находки работала бы:
find . -type f > filename передаст все файлы по каналу ниже текущего каталога в "имя файла".

После наблюдения ответа @steeldriver, комбинации его решения и мое устранило бы ". /" префикс, как так:

, Если Вы делаете не , хотят пустые имена каталогов в списке (т.е., просто имена файлов в каждом каталоге,
find -type f -printf "%P\n" > file

, Если Вы на самом деле делаете , хотят имена каталогов собой наряду с каталогом/именами файлов, затем опускают "-тип f" флаг от всех примеров.

1
ответ дан 6 October 2019 в 20:28

Другие вопросы по тегам:

Похожие вопросы: