sid*_*com 68 bash shell rsync arguments stripslashes
从'$ @'数组中的每个参数中删除尾部斜杠的最简单方法是什么,以便rsync按名称复制目录?
rsync -a --exclude='*~' "$@" "$dir"
Run Code Online (Sandbox Code Playgroud)
标题已更改以澄清.要了解有关多个尾部斜杠的注释和答案,请参阅编辑历史记录.
Sea*_*ght 119
您可以使用此处${parameter%word}详述的扩展.这是一个演示行为的简单测试脚本:
#!/bin/bash
# Call this as:
# ./test.sh one/ two/ three/
#
# Output:
# one two three
echo ${@%/}
Run Code Online (Sandbox Code Playgroud)
Chr*_*son 23
接受的答案将削减一个尾随斜线.
修剪多个尾部斜杠的一种方法是这样的:
VALUE=/looks/like/a/path///
TRIMMED=$(echo $VALUE | sed 's:/*$::')
echo $VALUE $TRIMMED
Run Code Online (Sandbox Code Playgroud)
哪个输出:
/looks/like/a/path/// /looks/like/a/path
Run Code Online (Sandbox Code Playgroud)
小智 18
这对我有用: ${VAR%%+(/)}
如http://wiki.bash-hackers.org/syntax/pattern所述
可能需要设置shell选项extglob.我看不到它为我启用但它仍然有效
She*_*ohn 10
仅供参考,我.bash_profile根据在 SO 上找到的答案将这两个函数添加到我的。正如 Chris Johnson 所说,所有使用的答案${x%/}都只删除一个斜杠,这些函数会按照他们所说的去做,希望这有用。
rem_trailing_slash() {
echo "$1" | sed 's/\/*$//g'
}
force_trailing_slash() {
echo "$(rem_trailing_slash "$1")/"
}
Run Code Online (Sandbox Code Playgroud)
realpath解决了给定的路径.除此之外,它还删除了尾部斜杠.使用-s防止以下simlinks
DIR=/tmp/a///
echo $(realpath -s $DIR)
# output: /tmp/a
Run Code Online (Sandbox Code Playgroud)
在zsh中您可以使用:a修饰符。
export DIRECTORY='/some//path/name//'
echo "${DIRECTORY:a}"
=> /some/path/name
Run Code Online (Sandbox Code Playgroud)
这类似于realpath但不会因缺少文件/目录作为参数而失败。