OSX: verifique se há subpastas, alise a estrutura de diretórios em uma nova pasta e mova para a área de trabalho

1

Estou no processo de limpeza de uma enorme biblioteca de mangas (principalmente - mas não apenas - arquivos de imagem). Cada manga tem uma pasta principal contendo subpastas, uma para cada volume.

Mas, às vezes, as pastas de volume contêm apenas arquivos de imagem e outras vezes contêm subpastas.

Eu gostaria de um script que, para a pasta de mangá selecionada:

  • verificar quais pastas de volume têm subpastas
  • achatar a estrutura de diretórios das pastas de volume com subpastas. Em vez de colocar todas as imagens na pasta pai e apagando as subpastas, gostaria de criar uma nova pasta no área de trabalho e copie todas as imagens das subpastas.
  • renomeie a pasta criada na área de trabalho após o pai original pasta

Antes:

manga_folder

volume1_folder

    subfolder1 / image1, image2, image3
    subfolder2 / image4, image5, image6
    subfolder3 / image7, image8, image9

volume2_folder

    image1, image2, image3, image4, image5, image6, image7, image8, image9

volume3_folder

    subfolder1 / image1, image2, image3
    subfolder2 / image4, image5, image6
    subfolder3 / image7, image8, image9

Depois:

Desktop:

volume1_folder

    image1, image2, image3, image4, image5, image6, image7, image8, image9

volume3_folder

    image1, image2, image3, image4, image5, image6, image7, image8, image9

As pastas originais devem permanecer intactas para que eu possa verificar se há arquivos perdidos etc.

Agora, eu uso um AppleScript que achata a estrutura de diretórios para cada pasta de volume que eu selecionar. Ele cria uma nova pasta dentro, com o nome de sua pasta pai com todas as imagens copiadas dentro.

O que não faz:

  • verifique quais pastas de volume possuem subpastas (preciso selecionar cada pasta de volume individualmente e iniciar o script de cada vez)
  • move a pasta criada com a estrutura de diretórios nivelada para a Desktop

Eu mesmo tentei implementar as alterações, mas poderia mover a nova pasta para a área de trabalho ou renomeá-la depois da pasta pai. Quando eu coloco as duas instruções (qualquer que seja a primeira a ser colocada), eu teria um erro dizendo que não poderia encontrar a pasta depois de executar a primeira instrução. Aqui está o script:

tell application "Finder"
    set theTopFolder to (selection as alias)
    set theFiles to a reference to every file of (entire contents of folder theTopFolder)
    set theNewFolder to make new folder at theTopFolder with properties {name:"Flattened Files"}
    duplicate theFiles to theNewFolder
    set name of theNewFolder to name of theTopFolder


    --move theNewFolder to "Macintosh HD:Users:xx:Desktop:"
end tell
    
por maqueiouseur 21.12.2013 / 19:43

1 resposta

1

tell application "Finder"
    repeat with f in (get folders of (POSIX file "/Users/username/manga_folder" as alias))
        make new folder at desktop with properties {name:(get name of f)}
        duplicate files of entire contents of f to result
    end repeat
end tell

Você também pode usar um comando shell como este:

cd ~/manga_folder;for d in *;do mkdir ~/Desktop/"$d";find "$d" -type f|while read f;do cp "$f" ~/Desktop/"$d";done;done

Ou se você tiver o cp do GNU:

cd ~/manga_folder;for d in *;do mkdir ~/Desktop/"$d";find "$d" -type f -exec gcp -t ~/Desktop/"$d" {} +;done

    
por 22.12.2013 / 17:42