Crie txt com caminhos completos para arquivos e algum texto adicional

3

Eu tenho um monte de arquivos, em muitas pastas e eu queria criar um arquivo txt com caminhos completos para esses arquivos e com espaço e nome do diretório em que eles estão. algo como:

halva/foo/bar/1/something.jpg 1
halva/foo/bar/2/another.jpg 2
halva/foo/bar/2/anotheranother.jpg 2

Criar uma lista de caminhos é algo como

find 'pwd' -name *.jpg

Mas não sei como adicionar espaço e nome do diretório após o caminho. Estou tentando categorizar as coisas para o projeto da escola.

    
por Piteight 13.09.2016 / 20:17

1 resposta

6
$ find .  -name *.jpg -exec bash -c 'd=${1%/*}; d=${d##*/}; printf "%s %s\n" "$1" "$d"' Out {} \;
./halva/foo/bar/1/something.jpg 1
./halva/foo/bar/2/another.jpg 2
./halva/foo/bar/2/anotheranother.jpg 2

Para cada arquivo encontrado por find , executamos o script bash d=${1%/*}; d=${d##*/}; printf "%s %s\n" "$1" "$d" , em que o primeiro argumento, $1 , é o nome do arquivo.

Usamos remoção de sufixo , d=${1%/*} , para obter o nome do diretório do nome completo do arquivo. Em seguida, usamos remoção de prefixo , d=${d##*/} , para remover todos, exceto o nome do último diretório de d . Por fim, printf é usado para imprimir a saída.

A string Out no comando acima não é usada, a menos que haja um erro no comando bash, caso em que ela funcione como o nome do comando efetivo, $0 .

Salvando a saída em um arquivo

Para salvar a saída em um arquivo, usamos redirecionamento :

find .  -name *.jpg -exec bash -c 'd=${1%/*}; d=${d##*/}; printf "%s %s\n" "$1" "$d"' Out {} \; >SchoolProject.txt

O símbolo > redireciona o stdout para o nome do arquivo que o segue.

    
por John1024 13.09.2016 / 20:29