È 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.