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

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

Estou limpando uma enorme biblioteca de mangás (principalmente - mas não apenas - arquivos de imagem). Cada mangá possui 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:

  • verifique quais pastas de volume possuem subpastas
  • nivelar a estrutura de diretórios das pastas de volume com subpastas. Em vez de colocar todas as imagens na pasta pai e apagar as subpastas, gostaria de criar uma nova pasta na área de trabalho e copiar todas as imagens das subpastas nela.
  • renomeie a pasta criada na área de trabalho após sua pasta pai original

Antes :

pasta_manga

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:

Área de Trabalho:

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 intactaspara que eu possa verificar se há arquivos perdidos, etc.

No momento, eu uso um AppleScript que nivela a estrutura de diretórios de cada pasta de volume selecionada. Ele cria uma nova pasta dentro, com o nome de sua pasta pai, com todas as imagens copiadas dentro.

O que não acontece:

  • verifique quais pastas de volume possuem subpastas (tenho que selecionar cada pasta de volume individualmente e iniciar o script a cada vez)
  • mova a pasta criada com estrutura de diretórios achatada para a área de trabalho

Eu tentei implementar as alterações sozinho, mas poderia mover a nova pasta para a área de trabalho ou renomeá-la com base na pasta pai. Ao colocar as duas instruções (qualquer que seja colocada primeiro), ocorreria um erro dizendo que não foi possível encontrar a pasta após executar a primeira instrução. Aqui está o roteiro:

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

Responder1

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 GNU cp:

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

informação relacionada