135

「$@」配列の各パラメータから末尾のスラッシュを削除してrsync、ディレクトリを名前でコピーする最も簡単な方法は何ですか?

rsync -a --exclude='*~' "$@" "$dir"

タイトルは明確化のために変更されています。複数の末尾のスラッシュに関するコメントと回答を理解するには、編集履歴を参照してください。

4

9 に答える 9

208

ここ${parameter%word}で詳しく説明されている展開を使用できます。動作を示す簡単なテスト スクリプトを次に示します。

#!/bin/bash

# Call this as:
#   ./test.sh one/ two/ three/ 
#
# Output:
#  one two three

echo ${@%/}
于 2012-01-26T13:34:33.020 に答える
48

受け入れられた回答は、末尾のスラッシュを 1 つ削除します。

複数の末尾のスラッシュを削除する 1 つの方法は次のとおりです。

VALUE=/looks/like/a/path///

TRIMMED=$(echo $VALUE | sed 's:/*$::')

echo $VALUE $TRIMMED

どの出力:

/looks/like/a/path/// /looks/like/a/path
于 2015-09-29T13:45:56.400 に答える
31

これは私のために働く:${VAR%%+(/)}

ここで説明されているようにhttp://wiki.bash-hackers.org/syntax/pattern

シェル オプション extglob を設定する必要がある場合があります。有効になっていることがわかりませんが、まだ機能しています

于 2015-01-08T17:55:49.160 に答える
10

.bash_profile参考までに、SOで見つかった回答に基づいて、これら2つの機能を追加しました。クリス・ジョンソンが言ったように、スラッシュを1つだけ削除することを使用したすべての回答は${x%/}、これらの関数が言うことを実行します。これが役立つことを願っています.

rem_trailing_slash() {
    echo "$1" | sed 's/\/*$//g'
}

force_trailing_slash() {
    echo "$(rem_trailing_slash "$1")/"
}
于 2016-08-16T11:04:07.670 に答える
4

zshでは:a修飾子を使用できます。

export DIRECTORY='/some//path/name//'

echo "${DIRECTORY:a}"

=> /some/path/name

これは次のようにrealpath機能しますが、不足しているファイル/ディレクトリが引数として失敗することはありません。

于 2015-10-28T01:03:44.253 に答える