我正在尝试获取文件路径中的最后4个目录以及文件名。我正在具有MinGW64的Windows机器上执行此操作。显然这没有“ rev”命令,所以我必须自己做:
#!/bin/bash
input="$1"
reverse=""
len=${#input}
for (( i=$len-1; i>=0; i-- ))
do
reverse="$reverse${input:$i:1}"
done
printf "$reverse"
如果我执行简单的~/reverse.sh 'hello world'
输出:dlrow olleh
但是,如果我这样做:
echo $(~/reverse.sh "/c/Users/myusername/5thfolder/4thfolder/3rdfolder/2ndfolder/1stfolder/this_is_my_target_file.sql") | cut -d"/" -f5-
我的输出是这样的:
redlofht4/redlofht5/emanresuym/sresU/c/
我希望它会反转输入文件名,然后将该输出(lqs.elif_tegrat_ym_si_siht/redlofts1/redlofdn2/redlofdr3/redlofht4/redlofht5/emanresuym/sresU/c/
)剪切。然后cut将采用前5个字段,我将得到输出lqs.elif_tegrat_ym_si_siht/redlofts1/redlofdn2/redlofdr3/redlofht4/
然后我将能够再次反转以获得我需要的输出。
答案 0 :(得分:2)
您需要在{p>中使用-f-5
而不是-f5-
... | cut -d"/" -f-5
您还可以使用sed
来获取文件路径中的最后4个目录以及文件名:
echo "/fff/eee/ddd/ccc/bbb/aaa/file.sql" | sed -r 's|.*(/.*/.*/.*/.*/.*)$|\1|'
将输出
/ddd/ccc/bbb/aaa/file.sql