Bash скрипт, который создает структуру каталогов - PullRequest
9 голосов
/ 21 марта 2011

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

/
shared
shared/projects
shared/series
shared/movies
shared/movies/action

Вы получаете точку.

Файл, из которого читается скрипт, выглядит следующим образом:

shared backup
shared data
shared projects 
shared projcets series
shared projects movies
shared projects movies action

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

Моя система - Ubuntu 10.10.

Пока я делал это, но это не работает.

#!/bin/bash

pwd=$(pwd)

for structure in ${column[*]}
do
  if [ $structure ]
  then
    cd $structure
  else
    mkdir $structure
  fi
done

cd $pwd

Ответы [ 6 ]

26 голосов
/ 21 марта 2011

Вы можете использовать mkdir -p shared/projects/movies/action для создания всего дерева: оно создаст shared, затем shared/projects, затем shared/projects/movies и shared/projects/movies/action.

Так что в основном вам нужен скрипт, который запускаетсяmkdir -p $dir где $dir - это конечный каталог вашего дерева каталогов.

7 голосов
/ 21 марта 2011

Если struct.txt содержит указанную вами структуру каталогов, просто запустите:

sed '/^$/d;s/ /\//g' struct.txt | xargs mkdir -p

sed удалит пустые строки и сделает оставшиеся строки похожими на пути к каталогам.
xargs будет принимать каждую строку и передавать ее в качестве параметра mkdir.
mkdir создаст каталог, а флаг -p создаст любые родительские каталоги, если это необходимо.

5 голосов
/ 21 марта 2011

mkdir имеет флаг -p, который создает все родительские каталоги каталога, который вы создаете при необходимости.Вы можете просто прочитать каждую строку, превратить ее в путь (то есть s/ /\//g) и вызвать mkdir -p $path в каждой строке

3 голосов
/ 12 февраля 2013

1) Сделайте что-то вроде этого

find . -type d > folder_list.txt

для создания списка папок, которые вам нужно создать.

2) Перенести список в пункт назначения

3) Создайте заново структуру в новом месте:

cat folder_list.txt | xargs mkdir

обратите внимание, что в этом случае вам не нужна опция -p, хотя это тоже не повредит.

1 голос
/ 04 декабря 2012

Я использую этот скрипт в своем .bash_profile, который я использую для новых проектов:

alias project_setup="mkdir Sites Documents Applications Website_Graphics Mockups Logos Colors Requirements Wireframes"

Если вы хотите создать структуру вложенных папок, вы можете сделать что-то вроде:

alias shared_setup="mkdir Shared shared/projects shared/series shared/movies shared/movies/action"
0 голосов
/ 03 марта 2014

Предполагая, что вы хотите создать дерево папок / каталогов, как показано ниже:

          tmpdir
    ________|______ 
   |        |      |
branches   tags  trunk
                   |
                 sources
               ____|_____
              |          |
          includes     docs

Также предполагается, что у вас есть переменная, которая упоминает имена каталогов.
DOMAIN_NAME=includes,docs

Вы можете выполнить следующую команду:
$ eval "mkdir -p tmpdir/{trunk/sources/{${DOMAIN_NAME}},branches,tags}"

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...