创建函数以返回BASH中的更新路径

Dan*_*man 1 bash

我在bash中有一个函数来删除路径的前两个目录.这很好用.我想补充一下新的起始路径,我遇到了问题.这是我到目前为止:

function fp {
  echo $1 | cut -d'/' -f4-
}
Run Code Online (Sandbox Code Playgroud)

如果我这样调用函数:

fp 'dir1/dir2/dir3/file'
Run Code Online (Sandbox Code Playgroud)

它返回'dir3/file1'.我现在需要它返回'dir5/dir6/dir3/file',如何在路径前追加其他目录?

更新:

该方法的最初目的是创建一个别名,如果它们已更改,则会将更新的文件复制到git仓库中.以下是现在可以使用的完整代码:

# Update dotfiles if there are any changes                                                                                                                         
alias dotu='for file in $(diff -qr ./ ~/ | grep differ | cut -d " " -f; do eval $(fp "$file"); echo "$file"; done'                                                                                                                                                                                                              
function fp {                                                                                                                                                      
  printf "%s%s" "cp $1 ~/dotfiles/" $(echo $1 | cut -d'/' -f4-)                                                                                                    
}
Run Code Online (Sandbox Code Playgroud)

虽然不是很擅长bash,但这可能很丑,但它对我有用.

更新#2:

好的,这是我最终得到的,让函数自己复制:

# Update dotfiles if there are any changes                                                                                                                         
alias dotu='for file in $(diff -qr ./ ~/ | grep differ | cut -d " " -f; do fp "$file"; echo "$file"; done'                                                                                                                                                                                                                         
function fp {                                                                                                                                                      
  cp $1 ~/dotfiles/${1#*/*/*/}                                                                                                                                     
}
Run Code Online (Sandbox Code Playgroud)

更新#3:

再一次,希望现在好了.

# Update dotfiles if there are any changes                                                                                                                         
alias dotu='for file in $(diff -qr ./ ~/ | grep differ | cut -d " " -f; do fp "$file"; echo "$file"; done'                                                                                                                                                                                                                         
function fp {                                                                                                                                                      
  cp "$1" ~/dotfiles/"${1#*/*/*/}"                                                                                                                                     
}
Run Code Online (Sandbox Code Playgroud)

Cas*_*yte 6

您可以使用参数扩展:

function fp {
    echo "dir5/dir6/${1#*/*/}"
}
Run Code Online (Sandbox Code Playgroud)