Как сделать строку каталогов с одной командой?

С mkdir управляйте, хочу ли я, чтобы это местоположение существовало ~/test/panda/fat когда только ~ часть его существует до сих пор, я должен сделать что-то вроде этого:

mkdir ~/test
mkdir ~/test/panda
mkdir ~/test/panda/fat

Хотя было бы намного более полезно, если я мог бы просто выполнить что-то как mkdir ~/test/panda/fat и вместо того, чтобы просто получить эту ошибку:

mkdir: cannot create directory ‘/home/$USER/test/panda/fat’: No such file or directory

На самом деле имейте его, создают каталог test в ~, затем каталог panda в ~/test, и затем наконец каталог fat в том подкаталоге. Я пропускаю что-то? Существует ли способ сделать это, поскольку это было бы очень полезно? То, что на самом деле было бы еще более полезным в определенных ситуациях, для меня также для сможения к также, автоматически создают файл в конце так, чтобы он создал бы все те каталоги и затем файл bamboo.txt в fat и чтобы все это было в той же команде (очевидно, не требующий там, чтобы быть файлом в конце хотя).

Если уже нет команды, которая может сделать это (который я был бы удивлен, нет ли), то, как я могу сделать сценарий для создания этого так?

Я выполняю Ubuntu GNOME 15.10 с GNOME 3.18.

0
задан 26 January 2016 в 19:04

3 ответа

Используйте -p опция mkdir:

mkdir -p ~/test/panda/fat

От man mkdir:

-p, --parents
              no error if existing, make parent directories as needed

Пример:

% mkdir /tmp/foo/bar
mkdir: cannot create directory ‘/tmp/foo/bar’: No such file or directory

% mkdir -p /tmp/foo/bar    ## Done

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

Самое большее можно добавить команду поколения файла после поколения каталога один:

mkdir -p ~/test/panda/fat && touch ~/test/panda/fat/bamboo.txt

Можно использовать расширение истории для touch команда, чтобы сделать его короче или создать оболочку функционирует для удобства.


Вот функция оболочки, которая сделает задание:

create_file_dir() {
    [ "$#" -ne 2 ] && echo 'Insufficient Arguments' ||

        case "$1" in -d)    mkdir -p "$2" && echo "Directory '"$2"' Created" ;;

                     -f)    mkdir -p "${2%/*}" && touch "$2" \
                              && echo "File '"$2"' Created" ;;

                      *)    echo "Invalid Argument"
        esac
}

Вставьте отрывок Ваш ~/.bashrc, сделать source ~/.bashrc и используйте его как:

create_file_dir -d /directories/to/create  ##For only directories
create_file_dir -f /path/to/file  ## For file with intermediate dirs

Протест: Если файл уже существует, touch изменит метку времени.

Пример:

$ create_file_dir -d /tmp/spam/egg/
Directory '/tmp/spam/egg/' Created

$ create_file_dir -f /tmp/spam/egg/foobar
File '/tmp/foo/bar/foobar' Created

$ create_file_dir /spam/egg
Insufficient Arguments

$ create_file_dir -m /spam/egg
Invalid Argument
8
ответ дан 26 July 2019 в 08:52

Попытайтесь использовать -p аргумент для создания родительских каталогов по мере необходимости.

   -p, --parents
          no error if existing, make parent directories as needed
2
ответ дан 26 July 2019 в 08:52

И если Вы не хотите использовать -p опция, Вы могли бы ввести:

mkdir  ~/test  ~/test/panda  ~/test/panda/fat
1
ответ дан 26 July 2019 в 08:52

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

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