我在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)