У меня есть набор файлов во многих папках, и я хотел создать 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
Но я не знаю, как добавить пространство и имя каталога после пути. Я пытаюсь категоризировать материал для школьного проекта.
$ 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 к имени файла, которое следует за ним.