Duplicare e rinominare la selezione del Finder nella stessa cartella in un unico passaggio pulito?

4

È possibile una cosa del genere? Ho questo codice che può fare quanto sopra:

set now to do shell script "date +%Y-%m-%d' '%H.%M.%S"
tell application "Finder"
    set finderSelList to selection as alias list
    try
        set fileDir to parent of first item of finderSelList as alias
    on error
        return "No selection"
    end try

    set dupeList to (duplicate finderSelList to fileDir) as list

    repeat with i from 1 to (count of dupeList)
        set ((dupeList)'s (item i)'s name) to ((finderSelList)'s (item i)'s name) & " [" & now & "]." & ((finderSelList)'s (item i)'s name extension)
    end repeat
end tell

return dupeList

Tuttavia, non è così pulito, cioè, puoi vedere che i duplicati dei file sono denominati <file name> 2.<file extension> , e poi un secondo in seguito viene chiamato in <file name> [date].<file extension> , il che è piuttosto difficile da vedere.

Ho una soluzione bash che è pulita (cioè non stonata), ma l'uso di Finder per copiare i file ha alcuni vantaggi (come le barre di avanzamento, l'annullamento delle operazioni di copia, la gestione di xattr diversa, ecc.):

finderSelection=$(osascript getfinderselection.scpt)

now=$(date +%Y-%m-%d' '%H.%M.%S)

if [ "$finderSelection" ]
    then
    echo "$finderSelection" |
    while IFS= read -r file
    do
        fileDir=$(dirname "$file")
        fileBaseN=$(basename "$file")
        fileName="${fileBaseN%.*}"
        fileExt="${fileBaseN##*.}"

        cp -r "$file" "$fileDir/[$now] $fileName.$fileExt"
    done

    afplay "/System/Library/Components/CoreAudio.component/Contents/SharedSupport/SystemSounds/system/Volume Mount.aif"

fi

... e getfinderselection.scpt contiene:

tell application "Finder"
    set finderSelList to selection as alias list
end tell

if finderSelList ≠ {} then
    repeat with i in finderSelList
        set contents of i to POSIX path of (contents of i)
    end repeat

    set AppleScript's text item delimiters to linefeed
    finderSelList as text
end if

In questa implementazione, quando bash duplica i file, non viene visualizzato alcun passaggio intermedio in cui i file vengono rinominati. No, quando i duplicati vengono generati, i loro nomi di file sono già finalizzati.

...

  • C'è un modo per implementare l'idea in AppleScript, ma non è così stridente e molto più semplice, come fa bash?
  • In primo luogo, dovrei correre con la soluzione AppleScript o quella bash?
  • In quale altro modo può essere migliorata la soluzione preferita? Per la soluzione AppleScript, ho bisogno di trovare un modo per rimuovere l'estensione del file da ((finderSelList)'s (item i)'s name) , e anche rimuovere il finale . quando si tratta di cartelle. Per la soluzione bash, le uscite fileName e fileExt, in particolare per le cartelle, possono essere inaspettate e disordinate.
posta Anonymous 17.12.2015 - 15:19
fonte

1 risposta

1

Per la tua soluzione di applescript, potresti duplicare in una directory temporanea (preferibilmente sullo stesso file system), quindi rinominarli nuovamente nella directory originale. Ho provato a hackerarlo insieme per te, ma ho rinunciato ...

Se vuoi un'alternativa, invece di bash potresti dare un'occhiata a questa risposta link che fornisce una (presumibilmente) bella gui python con progresso (non l'ho ancora testato).

    
risposta data 31.12.2015 - 12:33
fonte

Leggi altre domande sui tag