Стисніть файли з вихідним ім'ям так само, як і батьківська папка з автоматизатором


0

Я шукав в Інтернеті рішення для цього. Я хотів би створити робочий процес Автоматизатора, який буде копіювати вибрані файли, називати zip іменем батьківського каталогу та зберігати цей zip у поточному каталозі.

Я не можу знайти спосіб отримати батьківський каталог. Я якось вдарив тут про стіну. Хтось може мені допомогти?

Відповіді:


1

В Автоматизаторі:

  1. Додати Отримати вибрані елементи пошуку
  2. Додати запустити Applescript

Вставте цей код для Applescript:

on run {input, parameters}
 set pathList to {}
 repeat with itemNum from 1 to count of input
 tell application "System Events"
 copy POSIX path of (container of (item itemNum of input)) to end of pathList
 end tell
 end repeat
 return pathList
end run

Вихід / результати:

2013-05-11 00:06:02 +0000: Get Selected Finder Items completed
2013-05-11 00:06:02 +0000: Conversion from Files/Folders to Files/Folders completed
2013-05-11 00:06:02 +0000: Run AppleScript completed
2013-05-11 00:06:02 +0000: Workflow completed

{"/Users/Desktop", "/Users/Desktop", "/Users/Desktop"}

Добре круто, я спробував повернути перший елемент в останньому, return first text item of pathListі я отримую список назад. Мій шлях, а також "/Library/NetBoot/NetbootSP0". Як я можу повернути лише той шлях, який я хочу? Чи є спосіб я просто повернути останній каталог на цьому шляху?
смачноаст

@tastytoast - return item 1 of inputщоб отримати перший елемент замість нього return pathList. Це має бути досить очевидним, якщо ви вивчаєте зразок коду, який я надав.
Я '11

0

Ви можете скористатися дією Створити архів та перейменувати отриманий архів:

d=${1%/*}
start="$d/${d##*/}"
name="$start.zip"
i=2
while [[ -e $name ]]; do
  name="$start $i.zip"
  let i++
done
mv "$1" "$name"
open -R "$name"

Або скористайтеся подібним сценарієм запуску оболонки оболонки:

for n in $(seq $(printf %s "$@" | tr -dc / | wc -c)); do
  uniq=$(printf %s\\n "$@" | cut -d / -f1-$n | uniq)
  [[ $uniq != *$'\n'* ]] && dir=$uniq || break
done

cd "${dir:-/}"
[[ $dir ]] && start=${dir##*/} || start=archive
name="$start.zip"

i=2
while [[ -e $name ]]; do
  name="$start $i.zip"
  let i++
done

zip -r "$name" -- "${@#$dir/}"
open -R "$name"

Якщо деякі файли мають розширені атрибути або ACL, zip видаляє їх. Архів утиліти та дії Create Archive зберігають їх у форматі AppleDouble.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.