「$@」配列の各パラメータから末尾のスラッシュを削除してrsync
、ディレクトリを名前でコピーする最も簡単な方法は何ですか?
rsync -a --exclude='*~' "$@" "$dir"
タイトルは明確化のために変更されています。複数の末尾のスラッシュに関するコメントと回答を理解するには、編集履歴を参照してください。
「$@」配列の各パラメータから末尾のスラッシュを削除してrsync
、ディレクトリを名前でコピーする最も簡単な方法は何ですか?
rsync -a --exclude='*~' "$@" "$dir"
タイトルは明確化のために変更されています。複数の末尾のスラッシュに関するコメントと回答を理解するには、編集履歴を参照してください。
ここ${parameter%word}
で詳しく説明されている展開を使用できます。動作を示す簡単なテスト スクリプトを次に示します。
#!/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 を設定する必要がある場合があります。有効になっていることがわかりませんが、まだ機能しています
.bash_profile
参考までに、SOで見つかった回答に基づいて、これら2つの機能を追加しました。クリス・ジョンソンが言ったように、スラッシュを1つだけ削除することを使用したすべての回答は${x%/}
、これらの関数が言うことを実行します。これが役立つことを願っています.
rem_trailing_slash() {
echo "$1" | sed 's/\/*$//g'
}
force_trailing_slash() {
echo "$(rem_trailing_slash "$1")/"
}
zshでは:a
修飾子を使用できます。
export DIRECTORY='/some//path/name//'
echo "${DIRECTORY:a}"
=> /some/path/name
これは次のようにrealpath
機能しますが、不足しているファイル/ディレクトリが引数として失敗することはありません。