Questão arquivo e caminho separados no bash?


Como posso separar o caminho e os elementos de arquivo em um loop bash como este?

for file in `find /my/path -name "*.ext"`
do
    #(path,onlyfile) = separate_path_and_file $file
    #dosomethingwith $onlyfile
done

6


origem




Respostas:


Você não pode. Mas você pode fazê-las separadamente.

$ foo=/usr/local/bin/bar
$ echo "${foo##*/}"
bar
$ echo "${foo%/*}"
/usr/local/bin

10



Linda, muito obrigada. - 719016


eu sugeriria dirname e basename:

para arquivo em `find / my / path -name" * .ext "`
Faz
    caminho = "$ (dirname $ file)"
    onlyfile = "$ (basename $ file)"
    # ...
feito

18



Isso é muito mais legível do que a resposta aceita. - itsafire
e no caso de haver espaços no arquivo, eu adicionaria a cotação ao redor do arquivo $. stackoverflow.com/questions/7194192/… - Hermann Ingjaldsson
Dentro zsh do Windows Subsystem para Linux, path="$(dirname $file)" vai mudar $PATH, então onlyfile="$(basename $file)" irá imprimir erro basename: command not found - Weekend