Por que find
quando todos os arquivos estão em diretórios da mesma profundidade?
cd "$DIR"
cp */*-001.jpg /destination/path
Em um diretório, tenho centenas de subdiretórios. Cada subdiretório tem centenas de imagens jpg. Se a pasta for chamada "ABC_DEF", os arquivos dentro da pasta serão chamados "ABC_DEF-001.jpg", "ABC_DEF-002.jpg", e assim por diante.
Por exemplo:
---Main Directory
------Sub-Directory ABC_DEF
----------ABC_DEF-001.jpg
----------ABC_DEF-002.jpg
------Sub-Directory ABC_GHI
----------ABC_GHI-001.jpg
----------ABC_GHI-002.jpg
De cada subdiretório, desejo copiar apenas o primeiro arquivo, por exemplo, o arquivo com a extensão -001.jpg - para uma pasta de destino comum chamada DESTDIR.
Alterei o código fornecido aqui para se adequar ao meu caso de uso. No entanto, sempre imprime o primeiro diretório junto com os nomes de arquivo e não consigo copiar os arquivos para o destino desejado. O seguinte é o código:
DIR=/var/www/html/beeinfo.org/resources/videos/
find "$DIR" -type d |
while read d;
do
files=$(ls -t "$d" | sed -n '1h; $ { s/\n/,/g; p }')
printf '%s,%s\n' "$files";
done
Como posso corrigir este código?
Isso é fácil de fazer com find
apenas se você escolher o primeiro arquivo que está terminando com -001.jpg
padrão e apenas um em cada subdiretório, então o comando seria:
find . -name "*-001.jpg" -execdir echo cp -v {} /path/to/dest/ \;
Nota : remova o echo
para execução a seco quando o resultado for o esperado.
Você pode usar find -exec {} +
para obter uma lista dos arquivos e chamar cp
apenas uma vez:
find /path/to/main/dir -name "*-001.jpg" -exec cp -t /path/to/dest/dir/ {} +
Para testar o que ele faz primeiro, substitua cp
por echo cp
.