Você pode remover o caminho para o arquivo por rev-cut-rev:
ls dir/*.uploaded | rev | cut -d/ -f1 | rev
Eu quero encontrar um nome de arquivo específico de um diretório específico.
Além disso, não sei o nome do arquivo nesse diretório específico. Eu só conheço a extensão desse arquivo, por exemplo, ".uploaded". Então, usando essa extensão .uploaded eu quero encontrar o filemane.
Eu quero o nome do arquivo na saída sem o caminho completo até o diretório específico, eu só quero filename.
Então, como posso fazer isso?
Você pode remover o caminho para o arquivo por rev-cut-rev:
ls dir/*.uploaded | rev | cut -d/ -f1 | rev
Exemplo de estrutura de diretório:
$ ls -1 test
a
b.uploaded
c.uploaded
d.uploaded
e
Com find
, adequado para passar por outro comando via xargs
:
$ EXT='.uploaded'; find dir -maxdepth 1 -name "*$EXT" -exec basename {} "$EXT" \;
d
b
c
No script de shell, usando basename
para remover o diretório e o sufixo:
$ EXT=".uploaded"; for i in dir/*"$EXT"; do basename -- "$i" "$EXT"; done
b
c
d
No script de shell, usando a expansão de parâmetro:
$ EXT=".uploaded"; for i in dir/*"$EXT"; do i=${i##*/}; printf '%s\n' "${i%$EXT}"; done
b
c
d
Observe que você pode atingir vários arquivos. Você não definiu o que você quer que aconteça depois do arquivo. Se você tiver certeza de que há apenas um arquivo correspondente, você pode usar basename
diretamente:
$ rm dir/{b,d}.uploaded
$ basename dir/*.uploaded .uploaded
c
mas isso falhará se o glob combinar vários arquivos.