
フォルダー (常に同じフォルダー) とその内容を現在のディレクトリ (パスが指定されていない場合) または指定されたパスにコピーする新しいターミナル コマンドを作成するにはどうすればよいですか。
このコマンドには次のパラメータが必要です。
- 内容をコピーする新しいフォルダの名前(例
mkdir myNewFolder
:) - 新しいフォルダーを作成し、その内容を貼り付けるディレクトリのパス。
最終的には次のようになります。
$ createsite newFolderName ./Desktop/sites/
どこから始めたらいいのかよく分かりません。どんな助けでもありがたいです
答え1
mkdir -p
単にと を使いたいだけなら、で指定されたディレクトリ名にcp
コピーするかなり堅牢な関数を作成することもできます。it wall always be the same folder
dirnm
最初の引数(2番目の引数が指定されていない場合は現在の作業ディレクトリ)または、引数に/destpath/dirnm
パスが指定されている場合はdestpath
2番目の引数。
関連するパスを形成するには、destpath/dirnm の先頭と末尾の文字をチェック (および削除) する必要があります。また、destpath/dirnm'/'
の末尾の文字はdirnm
常に同じフォルダー ( destpath/dirnm -a` オプション、または必要に応じて) である必要があります。失敗した場合は、エラーをスローして戻ります。以下は、このような関数への 1 つのアプローチです。'/'
destpath. You then attempt to create
as given and on success copy
to
(with the
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 )
}
関数をあなたの (または ~/.profile) に含めるか、現在のシェルで手動で入力/エクスポートすることができます。また、次のような宣言に続いて、入力を減らす~/.bashrc
便利なものを作成します。alias
.bashrc
alias mdcp='mkdircp'
エイリアスを使用する場合は、次のように使用します。
mdcp dirnm [destpath (default: ./)]
it wall always be the same folder
にコピーしますdestpath/dirnm
。ご質問がある場合や、少し調整する必要がある場合はお知らせください。
答え2
関数を使用します。次の行を~/.profile
(または、OSX 以外の場合は~/.bashrc
)に追加します。
createsite(){
## Change this to point to the folder you want to copy
source="/path/to/source/folder"
## If no parameters were given, copy to the current directory
if [ $# -eq 0 ];
then
cp -rv "$source" .
## If an argument was given
elif [ $# -eq 1 ]
then
## Create the directory. The -p suppresses error messages
## in case the directory exists.
mkdir "$1"
## Copy
cp -rv "$source" "$1"/
## If more than one was given, something's wrong.
else
echo "Usage: $0 [target_directory]";
exit 1;
fi
}
次に、新しいターミナルを開いて、
createsite foo
これにより、 のコンテンツが/path/to/source/folder
新しく作成されたディレクトリにコピーされますfoo
。 これは非常に単純なアプローチであり、ディレクトリが存在する場合やファイルが上書きされる場合でも警告が表示されないことに注意します。
または、実行するcreatesite
と現在のディレクトリにコピーされます。
答え3
rsync は役に立つコマンドです。2 つのフォルダーの違いを調べて効率的に同期できます。ネットワーク経由でも動作します。
rsync source destination
ソースまたは宛先は、pwd
${HOME} のような式、. のような相対、または /tmp のような固定にすることができます。
詳細については、次のマニュアル ページをお読みください。
man rsync