Создайте txt с полными путями в файлы и некоторый дополнительный текст

У меня есть набор файлов во многих папках, и я хотел создать txt файл с полными путями к этому, регистрирует и с пространством и названием каталога, в котором они находятся. что-то как:

halva/foo/bar/1/something.jpg 1
halva/foo/bar/2/another.jpg 2
halva/foo/bar/2/anotheranother.jpg 2

Создание списка путей является чем-то как

find `pwd` -name *.jpg

Но я не знаю, как добавить пространство и имя каталога после пути. Я пытаюсь категоризировать материал для школьного проекта.

3
задан 13 September 2016 в 21:17

1 ответ

$ find .  -name *.jpg -exec bash -c 'd=${1%/*}; d=${d##*/}; printf "%s %s\n" "$1" "$d"' Out {} \;
./halva/foo/bar/1/something.jpg 1
./halva/foo/bar/2/another.jpg 2
./halva/foo/bar/2/anotheranother.jpg 2

Для каждого файла, найденного find, мы запускаем скрипт удара d=${1%/*}; d=${d##*/}; printf "%s %s\n" "$1" "$d" где первый аргумент, $1, имя файла.

Мы используем суффиксное удаление, d=${1%/*}, получить имя каталога из полного имени файла. Мы затем используем удаление префикса, d=${d##*/}, удалить всех кроме названия последнего каталога от d. Наконец, printf используется для печати вывода.

Строка Out в вышеупомянутой команде не используется, если нет ошибка в команде удара, в этом случае, она функционирует как эффективное название команды, $0.

Сохранение вывода в файл

Для сохранения вывода в файл мы используем перенаправление:

find .  -name *.jpg -exec bash -c 'd=${1%/*}; d=${d##*/}; printf "%s %s\n" "$1" "$d"' Out {} \; >SchoolProject.txt

> символ перенаправляет stdout к имени файла, которое следует за ним.

6
ответ дан 1 December 2019 в 15:23

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

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