Команда mkdir для получения списка путей к именам файлов - PullRequest
5 голосов
/ 13 февраля 2012

У меня есть текстовый файл с таким содержимым

/home/username/Desktop/folder/folder3333/IMAGw488.jpg
/home/username/Desktop/folder/folder3333/IMAG04f88.jpg
/home/username/Desktop/folder/folder3333/IMAGe0488.jpg
/home/username/Desktop/folder/folder3333/IMAG0r88.jpg
/home/username/Desktop/folder/folder3333/
/home/username/Desktop/folder/
/home/username/Desktop/folder/IMAG0488.jpg
/home/username/Desktop/folder/fff/fff/feqw/123.jpg
/home/username/Desktop/folder/fffa/asd.png
....

это пути к именам файлов, но также и к папкам.Проблема, которую я хочу решить, состоит в том, чтобы создать все папки, которые не существуют.

Я хочу вызывать команду mkdir для каждой несуществующей папки

Как это сделать простым способом?

Спасибо

Ответы [ 6 ]

11 голосов
/ 13 февраля 2012

Это можно сделать в собственном синтаксисе bash без каких-либо вызовов внешних двоичных файлов:

while read line; do mkdir -p "${line%/*}"; done < infile

Или, возможно, всего одним вызовом mkdir, если у вас bash 4.x

mapfile -t arr < infile; mkdir -p "${arr[@]%/*}"
2 голосов
/ 13 февраля 2012
xargs -n 1 dirname <somefile.txt | xargs mkdir -p
2 голосов
/ 13 февраля 2012

Как насчет ...

for p in $(xargs < somefile.txt);
do
    mkdir -p $(dirname ${p})
done
0 голосов
/ 11 июля 2014

Использование однострочного Perl и File::Path qw(make_path):

perl -MFile::Path=make_path -lne 'make_path $_' dirlist.txt
0 голосов
/ 15 февраля 2012

Если у вас есть файл «file1» с именами файлов, вы можете попробовать этот oneliner:

cat file1 |xargs -I {} dirname "{}"| sort -u | xargs -I{} mkdir -p "{}"

Использование:

xargs -I{} mkdir -p "{}"

гарантирует, что будут созданы даже пути с пробелами

0 голосов
/ 13 февраля 2012

Это также можно сделать без цикла (при условии, что размер входного файла невелик):

mkdir -p $(perl -pe 's#/(?!.*/).*$##' file.txt)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...