Возможно ли такое? У меня есть этот код, который может сделать выше:
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
Однако это не так чисто — то есть вы можете видеть, что дубликаты файлов имеют имена <file name> 2.<file extension>
, а через секунду получают имена <file name> [date].<file extension>
, что довольно неприятно видеть.
У меня есть чистое решение bash (т.е. не раздражающее), но использование Finder для копирования файлов имеет некоторые преимущества (например, индикаторы выполнения, отмена операций копирования, различная обработка xattr и т. д.):
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
... и getfinderselection.scpt содержит:
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
В этой реализации, когда bash дублирует файлы, вы не видите никакого промежуточного шага, на котором файлы переименовываются. Нет — когда появляются дубликаты, их имена файлов уже финализированы.
Так...
((finderSelList)'s (item i)'s name)
, а также удалить конец .
при работе с папками. Для решения bash выходные данные fileName и fileExt, особенно для папок, могут быть неожиданными и беспорядочными.Для вашего решения applescript вы можете продублировать его во временный каталог (желательно в той же файловой системе), а затем переименовать их обратно в исходный каталог. Я пытался взломать это для вас, но сдался...
Если вам нужна альтернатива, вместо bash вы можете посмотреть этот ответ https://stackoverflow.com/a/275945/1942837 , который предоставляет (предположительно) хороший графический интерфейс Python с прогрессом (я не тестировал это).