'$ @'配列の各パラメーターから末尾のスラッシュを削除して、rsync
が名前でディレクトリをコピーする最も簡単な方法は何ですか?
rsync -a --exclude='*~' "$@" "$dir"
明確にするためにタイトルが変更されました。コメントを理解し、複数の後続スラッシュに関する回答を得るには、編集履歴を参照してください。
詳細な${parameter%Word}
拡張を使用できます here 。動作を示す簡単なテストスクリプトを次に示します。
#!/bin/bash
# Call this as:
# ./test.sh one/ two/ three/
#
# Output:
# one two three
echo ${@%/}
受け入れられた回答は、末尾のスラッシュを1つ削除します。
複数の末尾のスラッシュを削除する方法の1つは次のとおりです。
VALUE=/looks/like/a/path///
TRIMMED=$(echo $VALUE | sed 's:/*$::')
echo $VALUE $TRIMMED
どの出力:
/looks/like/a/path/// /looks/like/a/path
これは私のために働く:${VAR%%+(/)}
ここで説明されているように http://wiki.bash-hackers.org/syntax/pattern
シェルオプションextglobを設定する必要がある場合があります。私はそれが有効になっているのを見ることができませんが、それはまだ動作します
realpath
は、指定されたパスを解決します。とりわけ、後続のスラッシュも削除します。つかいます -s
次のsimlinkを防ぐ
DIR=/tmp/a///
echo $(realpath -s $DIR)
# output: /tmp/a
zshでは、:a
修飾子を使用できます。
export DIRECTORY='/some//path/name//'
echo "${DIRECTORY:a}"
=> /some/path/name
これはrealpath
のように機能しますが、引数としてファイル/ディレクトリが欠落しても失敗しません。
参考までに、SOで見つかった回答に基づいて、これら2つの関数を.bash_profile
に追加しました。クリス・ジョンソンが言ったように、${x%/}
を使用するすべての答えはスラッシュを1つだけ削除します。これらの関数は、彼らが言うことをします。
rem_trailing_slash() {
echo $1 | sed 's/\/*$//g'
}
force_trailing_slash() {
echo $(rem_trailing_slash $1)/
}