Crea una nuova cartella per ogni file

1

Ho cercato di creare una sorta di script per automatizzare lo spostamento di circa 408 elementi di dimensioni di circa 1,5 TB.

Quello che voglio fare è creare una cartella basata sul nome del file, ma escludere l'estensione, quindi spostare l'elemento originale con lo stesso nome nella cartella. Tutti i file hanno estensioni diverse e hanno anche punti nel nome. Deve essere eseguito come uno script di shell o AppleScript, poiché verrà eseguito sotto launchd dopo che la mossa iniziale è stata eseguita per spostamenti automatici di file. C'è un buon modo per farlo? (Anche non usando AppleScript). Non mi dispiace usare la shell o qualsiasi altro metodo suggerito.

Ho trovato questo post su StackOverflow, ma non ha potuto dare troppo senso a questo, in quanto sembrava generare solo errori. Qualsiasi aiuto è apprezzato. I file hanno sequenze alfanumeriche e caratteri casuali nei nomi (penso che questo sia ciò che sta catturando in AppleScript.

Modifica: scusa per l'attesa ... era al lavoro.

Avere qualcosa come:

Movies
    |- Anchorman.mkv
    |- Big Buck Bunny.mov
    |- Spy.mp4
    |- Shawshank Redemption.avi

E vorrei il risultato:

Movies 
   |- Anchorman *"This is a folder"*
       |- Anchorman.mkv *"This is the file"*
   |- Big Buck Bunny
       |- Big Buck Bunny.mov
   |- Spy
       |- Spy.ext
   |- Shawshank Redemption [1994](1080p)
       |- Shawshank Redemption [1994](1080p).avi
    
posta bret7600 18.08.2017 - 15:35
fonte

2 risposte

2

Suppongo che tutti i 408 si trovino nella stessa cartella e che abbiano estensione. Qualcosa del genere:

Folder
|- File1.ext
|- File2.ext
|- File3.ext
|- File4.ext

E vuoi il seguente risultato:

Folder 
|- File1 *"This is a folder"*
   |- File1.ext *"This is the file"*
|- File2
   |- File2.ext
|- File3
   |- File3.ext<br>
|- File4<br>
   |- File4.ext<br>

Se questo è il caso, puoi farlo con il terminale con il seguente comando (eseguilo all'interno della cartella in cui sono archiviati i file. Non riuscirà a creare la cartella per i file senza estensione):

for FILE in *; do FOLDER=$(echo $FILE | sed 's/\.[A-Za-z0-9]*$//'); mkdir "$FOLDER"; mv "$FILE" "$FOLDER" ; done
    
risposta data 19.08.2017 - 00:26
fonte
1

Come altri hanno risposto, è difficile sapere esattamente cosa stai cercando senza i dettagli. Questo AppleScript dovrebbe essere un buon punto di partenza e puoi adattarlo alle tue esigenze. Ti verrà richiesto di identificare una cartella che contiene i file che desideri inserire nelle sottocartelle. Ho messo in cima una proprietà chiamata removePeriods, che puoi impostare su true o false (senza virgolette). Se è vero, rimuoverà tutti i periodi dal nome del file e userà quel nome per creare una cartella. Ovviamente, puoi modificare quella che è la punteggiatura che desideri. Potresti ulteriormente escludere anche altri segni di punteggiatura. Alla fine, prende il file e lo sposta nella nuova cartella.

property rootFolder : ""
property removePeriods : true

--Assuming all the files you want to move are in one folder.
if rootFolder is "" then
    set rootFolder to choose folder
end if

--Get a list of every visible file in the folder (assuming you don't want to process hidden files)
tell application "System Events" to set myFiles to ¬
every file in rootFolder whose visible is true

repeat with aFile in myFiles
    --Get the file name
    set aName to name of aFile
    --If removePeriods property above is set to true, take all the periods out of the file name
    if removePeriods then
        set tid to text item delimiters
        set text item delimiters to "."
        if (count of text items of aName) is greater than 2 then
            set aName to text items 1 through ((count of text items of aName) - 1) of aName
        else
            set aName to text item 1 of aName
        end if
        set text item delimiters to tid
        set aName to every item of aName as text
    end if

--Make a new folder with the name of the file, inside the rootFolder (the original folder you selected
tell application "Finder"
    set newFolder to make new folder at rootFolder with properties {name:aName}
    move (aFile as alias) to newFolder
end tell

end repeat

Se hai una cartella all'interno di cartelle, questo è un altro livello ma può essere fatto con un altro ciclo. Se vuoi che tutte le nuove cartelle con i file in esse siano posizionate in una nuova posizione, devi solo aggiungere quel percorso. Se si desidera rimuovere solo il nome prima del primo segno di punteggiatura per creare la cartella, è possibile impostare a Nome solo la prima voce di testo. Probabilmente vorrai anche aggiungere un assegno per assicurarti che non ci sia già una cartella con il nome che stai creando.

EDIT: su richiesta di un altro utente, aggiungo una nota per chiarire perché ho impostato rootFolder su una proprietà piuttosto che su una variabile standard. Nella foto sopra, sembra che tutti i file dell'OP si trovino nella cartella dei filmati. Una proprietà, in AppleScript (e in termini semplici), è una variabile che viene salvata (memorizzata) tra le esecuzioni. Verrà salvato fino a quando lo script sarà nuovamente compilato, momento in cui verrà impostato su "". Una variabile normale non avrà memoria di una precedente esecuzione dello script. Ho scelto di rendere rootFolder una proprietà in modo che l'utente non debba selezionare manualmente la cartella da elaborare in ogni esecuzione, solo la prima. Tuttavia, è possibile sostituire l'inizio dello script tramite "end if" con le seguenti due righe di codice:

set rootFolder to choose folder
set removePeriods to true

È anche possibile codificare il percorso della cartella anziché farlo selezionare all'utente. Ci sono molte opzioni Dovrei anche dire di nuovo che questa non è una sceneggiatura finita pensata per l'uso finale, l'ho creata come un punto di partenza. Tuttavia, ho usato questa base come parte di uno script molto più grande e più complicato, per riorganizzare più di 500.000 file raggruppati in cartelle con un nome univoco, quindi sono fiducioso nella struttura.

    
risposta data 22.08.2017 - 22:43
fonte

Leggi altre domande sui tag