Applescript - genişletilmiş liste görünüm penceresinde tüm * non * -folders'ı nasıl seçebilirim?


1

Liste Görünümünde bulunan ve tüm alt klasörleri ortaya çıkaran / genişleten belirli bir Finder penceresinde tüm klasörleri seçmeyecek bir komut dosyası yazmaya çalışıyorum.

Klasörlerden çok daha fazla dosya olma eğiliminde olduğundan, benim düşüncem:

  1. Tüm öğeleri seç
  2. Tüm klasörlerin seçimini kaldır

Ayrıca hiçbir şey seçili olmadan başlamaya ve daha sonra seçimime klasör olmayan eklemeyi de istiyorum.

Her durumda, güdük oldum. Herhangi bir yardım takdir edilecektir.

İstenilen sonuç şuna benzer:

enter image description here

EDIT: (xy problemini cevaplamak için - uzun sürecek, ama sen istedin)

Bilgisayarları geçimim için tamir ediyorum, bu da çok fazla "Veri yedekleme, sabit diski silme, işletim sistemini yükleme, verileri geri yükleme" anlamına geldiğim anlamına geliyor. Hem Windows hem de Mac, Mac'imdeki tüm yedeklemeleri yapmama rağmen, istemcinin verileri ağ üzerinden bir Mac biriminden geri yüklendi.

Genellikle tüm klasörleri yedekleme biriminden geri yüklenen Windows PC'ye sürükler ve bitmesini beklerim. Bazen de, kopya başarısız olur, çünkü "yol adı çok uzun" ya da bu saçmalıklardan dolayı. Bu gibi durumlarda, işim bitene kadar bir anda daha küçük parçaları kopyaladım.

Daha sonra hiçbir dosyayı / klasörü kaçırmadığımı kontrol edip tekrar kontrol etmem gerekiyor. Böylece, biri kaynak klasörle diğeri hedef klasörle iki pencere açıyorum. Ve her birinden klasörleri (Müzik, Dokümanlar, vb.) Karşılaştırırım. Dosya / klasör sayısının eşleşip eşleşmediğini ve kullanılan bayt miktarının aynı olup olmadığını görmek istiyorum.

Genellikle, Mac klasörlerindeki .DS_Store nedeniyle, baytlar eşleşmiyor. Klasörü açarsam ve Get Summary Info sadece içeriklerde, bayt sayısı mükemmel bir şekilde eşleşir.

Yani, onlarca veya yüzlerce klasörü ve alt klasörü açmak yerine, tek tek, yaptığım şey açık. Documents Örneğin, liste görünümünde, tüm alt klasörleri (zaten AppleScript'te yapabildiğim kadar) ortaya çıkar Select All ve klasörlerin seçimini kaldırın ve ardından Get Summary Info.

Yukarıdaki resmimde elbette manuel olarak yapabilirim. Ancak, çoğu durumda, yüzlerce dosyadan ve birkaç klasörden derinlemesine klasörlerim var. El ile yaparsam, son 10 klasörün seçimini kaldırmadan hemen önce, uzun bir süre ve kaçınılmaz bir şekilde zaman alırsa, hatalı bir tıklama yapacağım ve baştan başlamak zorundayım.

Bu yüzden bir betiğin tüm klasörleri seçmemesini istiyorum.

Başka bir çözüm varsa, harika. Duymama izin ver.


Neden onları seçmek istiyorsun? Sorunu söylerseniz, belki daha iyi bir çözüm var. Bu XY Problemini okuyun.
user14492

1
bu kullanım durumunun bir GUI'ye ihtiyacı yoktur ve dosya sistemlerini senkronize etmek için tasarlanmış bir ürün için daha uygun görünmektedir: rsync.
Tim B

@TimB ile birlikteyim rsync bu yedekleri yapmak için. Bir yedekleme kesintiye uğrarsa / doğru şekilde kullanırsanız, başarılı bir şekilde kopyalanan dosyaları akıllıca inceler, onları yok sayar ve esasen yalnızca kaçırılanların yedeğini alır. Unutulmaması gereken bir şey, eğer Windows'tan Mac'e kopyalıyorsanız, iki dosya sistemi (sırasıyla NTFS ve HFS +) farklı zaman damgalarını depolar. Yani içine bak --modify-window geçiş yapın veya her seferinde her şeyi kopyalayabilirsiniz. :)
Alistair McMillan

Sadece rsync'i çalıştırmak için 3 saat geçirdim. Mac-> gt; cygwin kullanan Windows çeşitli nedenlerle başarısız oldu. Acrosync / Win, vurgulanmış dosya / klasör adları nedeniyle önceden kopyalanmış ve doğrulanmış klasörlerin kopyalarını yaratıyor. Kısacası, bu "cevap" şu anda pek yardımcı olmuyor. Gelecekte bu aracı araştırmaya devam edeceğim, ancak birileri tamamen başka bir şey önermek yerine sorduğum soruyu yanıtlayabilir mi? Komut dosyasını çalıştırmadan önce yukarıdaki resmimde "tümünü seçersem", seçimi geçebileceğim bir değişkene koymanın bir yolu var mı?
Zonker.in.Geneva

Yanıtlar:


0

Tüm klasörler liste görünümünde harcanırsa, işte iki çözüm.

İlk çözüm:

Bu AppleScript

my deselectAllFolders()

on deselectAllFolders()
    script o
        property sel : {}
    end script
    tell application "Finder"
        set o's sel to selection as alias list
        set tc to count o's sel
        repeat with i from 1 to tc
            if class of item (item i of o's sel) is folder then set item i of o's sel to missing value
        end repeat
        set selection to aliases of o's sel -- select all items without folders
    end tell
    return "" -- to not put all files into the result (it's very slow to show an huge list in the editor )
end deselectAllFolders

Eksileri:

  • Komut dosyası çalıştırılmadan önce tüm öğeler seçilmelidir.
  • Büyük ürün listesinde yavaşça.

İkinci çözüm:

Bu AppleScript

set pScript to "from Foundation import NSFileManager, NSURL, NSDirectoryEnumerationSkipsHiddenFiles, NSURLIsDirectoryKey, NSURLIsPackageKey; from ScriptingBridge import SBApplication
def procFolder(fold):
    p = df.contentsOfDirectoryAtURL_includingPropertiesForKeys_options_error_(fold, [NSURLIsDirectoryKey, NSURLIsPackageKey], NSDirectoryEnumerationSkipsHiddenFiles, None)[0]
    for f in p:
           r=f.getResourceValue_forKey_error_(None, NSURLIsPackageKey, None)
           if r[0] and r[1]:
               allFiles.append(f)
           else:
               r=f.getResourceValue_forKey_error_(None, NSURLIsDirectoryKey, None)
               if r[0] and r[1]:
                     procFolder(f)
               else:
                     allFiles.append(f) 

allFiles = []
df=NSFileManager.defaultManager() 
finderApp = SBApplication.applicationWithBundleIdentifier_(\"com.apple.finder\")
tPath = finderApp.FinderWindows()[0].target().get()
procFolder(NSURL.URLWithString_(tPath.URL()))
finderApp.setSelection_(allFiles)"

do shell script "/usr/bin/python -c " & quoted form of pScript
  • Liste görünümündeki tüm öğeleri seçmenize gerek yok.
  • Hızlı (8500 öğede 1,5 saniye)

0

Ne yazık ki, Finder dosyaları bu şekilde göstermeyi desteklemiyor.

Aşağıdaki kod, seçilen dizindeki dosyalara 'Dosya'ları ayarlar, ancak' ortaya koyma 'herhangi bir parametreyi desteklemez. Pencereyi zaten açtıysanız, o penceredeki seçilen klasörün kök dizinindeki dosyaları seçer, ancak daha sonra her klasör için bir pencere açar.

tell application "Finder"
  set theFiles to get every item of (entire contents of folder (choose folder)) whose kind ≠ "Folder"
  reveal theFiles
end tell

Hala bunun daha fazlası olduğunu hissediyorum. XY sorunu gerçi.


evet, "açığa vurma" farklı bir anlama sahip gibi görünüyor, hala kullanmak için doğru kelime bulamadım. Komut dosyam zaten Finder'ın ön penceresini Liste Görünümü olarak değiştirdi, tüm klasörleri seçti ve ardından tüm klasörleri ve alt klasörlerini genişletmek için "Sağ Ok" tuş vuruşunu yayınladı. Beni şaşırtan şey, neden senaryoda "Tümünü Seç" yazamıyorum, oysa el ile yapabilirim. Çalışmak için "Tümünü Seç" i alabilirsem, seçimi bir değişkene kaydedebilirim ve sonra da klasör dışı öğeleri kaldırmak için gezinirmişim gibi hissediyorum. Her neyse, herhangi bir yardım takdir edilmektedir.
Zonker.in.Geneva

@ Zonker Oh, GUI komut dosyası, bu yaklaşımı bile düşünmedim. Finder AppleScript sözlüğünün, dosyaların listesini programsal olarak edinmeye çalışmasını sağladım, sonra ortaya çıkardım. Yine de AppleScript'in doğru bir yaklaşım olmadığını ve Keyboard Maestro'nun bir XY problemi gibi görünse bile, daha iyi komut dosyası (hem GUI hem de programatik olarak) olduğunu söyleyebilirim. Alternatif bir çözüm görmeyi dört gözle bekliyorum.
grg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.