Если вы просто не хотите использовать mkdir -p
а затем cp
, то вы можете также создать довольно надежную функцию для ее копирования, it wall always be the same folder
с именем каталога, заданным dirnm
в качестве первого аргумента (в текущий рабочий каталог, если второй аргумент не задан) или /destpath/dirnm
если путь, представляющий destpath
, указан в качестве второго аргумента.
При формировании задействованных путей вам нужно будет проверить (и удалить) начальные и конечные символы '/'
в dirnm
и любые конечные символы '/'
в destpath. You then attempt to create
Затем вы пытаетесь создать destpath/dirnm, as given and on success copy
его всегда будет та же папка, to
destpath/dirnm (with the
-a` или по желанию). В случае неудачи выведите ошибку и вернитесь. Ниже приведен один из подходов к такой функции:
mkdircp ()
{
srcdir="NameOfDirToCopy" ## the name of the dir you always copy (w/full path)
[ -d "$srcdir" ] || { ## validate srcdir exists
printf "error: source directory '%s' does not exist.\n" "$srcdir"
return 1
}
[ -z $1 ] && { ## validate that required dirnm given
printf "usage: mdcp dirnm [destpath (default ./)]\n";
return 1
};
## trim leading/trailing '/' from dirnm
[ ${1:0:1} == '/' ] && dirnm="${1:1}" || dirnm="$1"
[ ${1:(-1)} == '/' ] && dirnm="${dirnm%/}"
## if destpath given, trim trailing '/' & set destdir
if [ -n "$2" ]; then
[ ${2:(-1)}x == '/x' ] && destpath="${2%/}" || destpath="$2"
[ -n "$2" ] && destdir="${destpath}/${dirnm}"
else
destdir="./$dirnm" ## default destdir in ./
fi
## create destdir & validate or throw error
[ -d "$destdir" ] || mkdir -p "$destdir"
[ -d "$destdir" ] || {
printf "error: unable to create destdir '%s'. (check permissions)\n" "$destdir"
return 1
}
## copy (-recursive -archive) "$srcdir" "$destdir"
printf "copying: %s -> %s\n" "$srcdir" "$destdir"
# cp -a "$srcdir" "$destdir" ## (uncomment for actual copy )
}
Я бы включил эту функцию в ваш ~/.bashrc
(или ~/.profile), или вы можете вручную ввести /экспортировать ее в вашу текущую оболочку. Я также создал бы удобный alias
чтобы сократить ввод после объявления в .bashrc
например:
alias mdcp='mkdircp'
С псевдонимом использование:
mdcp dirnm [destpath (default: ./)]
Чтобы скопировать it wall always be the same folder
в destpath/dirnm
. Дайте мне знать, если у вас есть какие-либо вопросы или вам нужно что-то скорректировать.