Como copiar vários arquivos e movê-los para várias pastas usando o terminal para Mac

0

Eu tenho uma pasta na área de trabalho do meu Mac chamada Bthepics que tem 9 imagens que eu quero copiar e mover para cerca de 500 pastas de uma só vez. Essas 500 pastas estão localizadas em uma pasta na área de trabalho do meu Mac chamada bigcities . Eu não quero ter que fazer isso manualmente, selecionando todas as 9 imagens e arrastando cada grupo de nove para todas as 500 pastas individualmente.

Alguém pode me mostrar como fazer isso usando os programas Terminal ou Automator do Mac?

    
por Matt 16.09.2014 / 10:18

3 respostas

0

Isso faz um loop em todas as pastas em bigcities e copia todas as imagens de Bthepics para essa pasta. Execute isso no Terminal e veja se ele gera o que você deseja. Você pode simplesmente copiar e colar esse bloco de código.

find ~/Desktop/bigcities -type d -maxdepth 1 -print0 | while IFS= read -r -d '' folder; do
  echo cp ~/Desktop/Bthepics/*.jpg "$folder"
done

Para fazer a cópia real, remova o echo antes de colar. Estou assumindo que suas imagens de origem têm a extensão .jpg .

Depois, basta remover as imagens originais manualmente.

    
por 16.09.2014 / 10:23
0

Aqui está um código mais simples que não precisa executar o comando externo ( find ) e canalizar a saída. O resto é o mesmo que na resposta do slhck.

cd ~/Desktop/bigcities ; for folder in */ ; do
  echo cp ~/Desktop/Bthepics/*.jpg "$folder"
done

Esse código tem uma desvantagem: a lista de pastas de destino não deve exceder cerca de 260 000 caracteres (limite de tamanho de linha de comando no Mac OS X 10.5). Para 500 pastas, são cerca de 500 caracteres por nome de pasta.

    
por 16.09.2014 / 10:47
0

Você deve se familiarizar com o comando xargs para tarefas de automação como esta:

find ~/Desktop/bigcities -type d -print0 | xargs -I% cp ~/Desktop/Bthepics/image[1-9].jpg %/

isto se suas 9 imagens forem nomeadas image1.jpg image2.jpg ...
se suas 9 imagens diferirem de nomes:

find ~/Desktop/bigcities -type d -print0 | xargs -I% cp ~/Desktop/Bthepics/file1.jpg ~/Desktop/Bthepics/file2.jpg ... ~/Desktop/Bthepics/file9.jpg %/

o comando no final do xargs é o mesmo que você executa manualmente com% será substituído pelo caminho das pastas

Btw, este comando irá copiar imagens para a pasta pai (~ / Desktop / bigcities), então você precisa removê-lo por um comando:

rm ~/Desktop/bigcities/image[1-9].jpg

Espero que você entenda minha ideia e a aplique no seu caso.

    
por 16.09.2014 / 12:55