Script Bash para gravar atributos de metadados de arquivos em arquivos de texto separados

1

Eu tentei codificar um script bash que percorre um determinado diretório e todos os seus subdiretórios e extrai os atributos de metadados com o comando mdls em arquivos de texto separados. Como tenho muitos nomes de arquivos contendo espaços e outros caracteres especiais, minha base de código é derivada da resposta " Looping através de arquivos com espaços nos nomes? ". Mas depois de cada arquivo o script aguarda para pressionar Enter / Retornar manualmente.

Como posso fazer isso automaticamente através de arquivos e pastas?

#!/bin/bash
# write metadata of files in separate file

find . -type f -name '*.*' -exec sh -c '
  for file do
    echo "$file"
    mdls "$file" > "$file"_metadata.txt
    read line </dev/tty
  done
' sh {} +
    
por Madamadam 23.09.2018 / 23:18

2 respostas

1
  1. O comando read line </dev/tty está lendo uma linha do terminal (isto é, o teclado). Se você não quiser fazer isso, exclua esse comando.
  2. O loop parece estar funcionando bem além disso? (De relance, parece muito bem para mim.) Se não, edite sua pergunta para dizer o que acontece.
  3. -name '*.*' diz para procurar apenas em arquivos cujos nomes contenham um período (a.k.a. "dot", . ). Se você quiser excluir arquivos cujos nomes não incluam um . (como data e README ), essa é a maneira perfeita de fazer isso. Mas se você quiser lidar com arquivos todos , deixe a cláusula -name - encontrar olha para todos os arquivos por padrão; cláusulas como -type f , -name something , -mtime value , etc. todos especificam restrições (isto é, exclusões) à pesquisa.
por 23.09.2018 / 23:53
1
find /path/to/Users/myuser -type f -print0 | 
xargs -0 -I% sh -c "mdls "%" > "%"_metadata.txt"
    
por 23.09.2018 / 23:25