lsof ไม่แสดงไฟล์ทั้งหมดที่เปิดในแอพดูตัวอย่าง


3

ฉันมีประมาณ 43 ไฟล์ที่เปิดอยู่ในหน้าตัวอย่างอย่างไรก็ตามเมื่อฉันรันlsof -c Previewฉันจะได้รับเศษของไฟล์เหล่านั้น (เช่น 8 ไฟล์) ที่เปิดอยู่ในปัจจุบัน

นี่เป็นผลลัพธ์เดียวกันกับที่ฉันได้รับเมื่อใช้ Activity Monitor แต่ฉันต้องการบันทึกรายการทั้งหมดของไฟล์ที่เปิดอยู่เพื่อที่ฉันจะสามารถเปิดรายการไฟล์นี้อีกครั้งในภายหลัง

ฉันได้พบเคล็ดลับเกี่ยวกับวิธีดึงรายการของไฟล์ปัจจุบันที่เปิดในลิงค์นี้

ใครบ้างมีคำใบ้ของสิ่งที่อาจเกิดขึ้น? อีกวิธีที่จะเป็นประโยชน์คือการเรียกดูรายการไฟล์ที่เปิดในส่วนดูตัวอย่างล่าสุด

แก้ไข:

ตามความเห็นของ DA Vincent เป็นไปได้ว่าไฟล์จะถูกปิดหลังจากโหลดไปยังหน่วยความจำ หากเป็นไปได้ที่จะทำการเฝ้าดูไฟล์ที่เปิดโดยดูตัวอย่างและบันทึกลงในไฟล์นี่จะเป็นโซลูชันที่เหมาะสมเช่นกัน โดยเฉพาะอย่างยิ่งถ้าเธรด watcher นี้สามารถเปิดใช้งานเมื่อผู้ใช้เข้าสู่ระบบหรือระบบปฏิบัติการเริ่ม


2
เราคาดหวังว่าทุก ๆ หน้าต่างเดียวที่เปิดใน Preview จะมีไฟล์เดียวที่เปิดอย่างที่เห็นโดย lsof หรือไม่? ในขณะที่ฉันไม่ใช่นักพัฒนา Mac ที่มีประสบการณ์ดูเหมือนว่าจะเป็นเรื่องธรรมดาสำหรับ Preview.app ที่จะสามารถอ่านไฟล์รูปภาพทั้งหมดจากดิสก์ไปยังหน่วยความจำแล้วออกระบบปิด โดยเฉพาะอย่างยิ่งหากดูตัวอย่างแสดงไฟล์หลายสิบไฟล์
DA Vincent

1
การตรวจสอบแอปพลิเคชันคืออะไร คุณหมายถึง Activity Monitor หรือเปล่า
DA Vincent

1
@Davincent ฉันมีหนึ่งหน้าต่างที่เปิดอยู่สำหรับทุกไฟล์แม้ว่ามันจะแสดงให้เห็นเพียงบางส่วนเท่านั้น คุณหมายความว่าหน้าตัวอย่างกำลังปิดไฟล์และเก็บภาพไว้ในหน่วยความจำหรือไม่? ดังนั้นวิธีการอื่นก็คือให้ผู้เฝ้าดูไฟล์ที่เปิดโดยแอพดูตัวอย่างและเขียนลงในบันทึก
เวอร์เนอร์

1
@Davincent ใช่ฉันหมายถึงการตรวจสอบกิจกรรม
เวอร์เนอร์

1
ใช่ @Werner คุณเข้าใจสิ่งที่ฉันได้รับ เราสามารถสร้างสคริปต์เพื่อดู Preview.app อาจเป็นเรื่องยากที่จะหลีกเลี่ยงสภาพการแข่งขันที่พรีวิววิ่งเร็วเกินไปที่ผู้สังเกตการณ์จะสังเกตเห็น แต่การคาดการณ์จากประสบการณ์ที่ผ่านมาของฉันกับคอมพิวเตอร์ othe4r บางทีเราอาจมีสคริปต์ที่ใช้ฟังก์ชั่นการตรวจแก้จุดบกพร่องของระบบเพื่อจับภาพทุกการเรียกระบบที่ทำตัวอย่าง
DA Vincent

คำตอบ:


3

นี่คือทางออกของแอปพลิเคชัน นี่จะให้รายการไฟล์ที่เปิดทั้งหมด (รวมถึงเส้นทางแบบเต็ม) ในแอปดูตัวอย่าง

นอกจากนี้หากปรมาจารย์ AppleScript ทุกคนเจอคำตอบนี้ฉันจะขอบคุณสำหรับคำวิจารณ์ที่สร้างสรรค์ที่คุณมีให้ :)

set text item delimiters to "\n"
set myList to {}
tell application "Preview"
    set theDocs to get documents
    repeat with eachDoc in theDocs
        set thePath to path of eachDoc
        copy thePath to end of myList
    end repeat
end tell
set the_list to myList as text
tell application "Finder"
    set myFile to "/Users/YourName/YourFolder/FileName.txt"
    do shell script "date >> " & myFile
    do shell script "echo " & quoted form of the_list & " >> " & myFile
end tell

นี่จะพิมพ์วันที่ปัจจุบันตามด้วยรายการของเอกสารทั้งหมดที่เปิดใน Preview หากคุณไม่ต้องการออกวันที่ให้ลบบรรทัดออก:

do shell script "date >> " & myFile

อย่าลืมกรอกข้อมูลที่ถูกต้องในบรรทัด:

set myFile to "/Users/YourName/YourFolder/FileName.txt"

หากคุณต้องการเพิ่มการประทับวันที่ในชื่อไฟล์ของคุณเพียงแค่ใส่บรรทัดต่อไปนี้ไว้ใต้tell application "Finder"บล็อค

set time_stamp to (do shell script "date \"+%m-%d-%y\"")
set myFile to "/Users/YourName/YourFolder/PreviewProfile_" & time_stamp & ".txt"

dateคำสั่งเทอร์มินัลมีหลายรูปแบบให้เลือก หากต้องการอ่านเกี่ยวกับตัวเลือกที่แตกต่างกันที่มีอยู่เปิด terminal man strftimeและประเภทของคุณ

หลังจากเล่นไปอีกสักครู่ฉันก็รู้ว่าสคริปต์นี้สามารถทำให้ง่ายยิ่งขึ้นไปอีก นี่เป็นรุ่นที่มีความคล่องตัวมากกว่าซึ่งหลีกเลี่ยงขั้นตอนที่ไม่จำเป็นบางอย่างจากต้นฉบับ แต่ผลลัพธ์ก็เหมือนกัน

set text item delimiters to "\n"
tell application "Preview"
    set theDocs to get path of every document as text
    tell application "Finder"
        set time_stamp to (do shell script "date \"+%m-%d-%y\"")
        set myFile to "/Users/YourName/YourFolder/PreviewProfile_" & time_stamp & ".txt"
        do shell script "echo " & quoted form of theDocs & " >> " & myFile
    end tell
end tell

เพื่อความสะดวกในการใช้งานคุณสามารถบันทึกสคริปต์นี้เป็นบริการ Automator เพื่อใช้ในขณะที่ทำงานในแอปพลิเคชันใด ๆ ในการทำเช่นนั้นเพียงเปิดAutomatorจากนั้นจากเมนูFileเลือกNewหรือ⌘Nจากคีย์บอร์ด จากนั้นเลือกบริการจากตัวเลือกที่แสดง เมื่อเอกสารเปิดขึ้นให้เลือกยูทิลิตี้ในคอลัมน์ซ้ายสุด จากนั้นเลือกเรียกใช้ AppleScriptในคอลัมน์ทางด้านขวาของ วางสคริปต์นี้ลงในกล่องที่ปรากฏขึ้น ในตัวเลือกแบบเลื่อนลงใกล้ด้านบนของหน้าเลือกบริการไม่ได้รับอินพุตและในแอปพลิเคชันใด ๆ. จากนั้นเพียงเลือกและตั้งชื่อบันทึกไฟล์และคุณควรจะมีบริการให้ใช้งานได้ตลอดเวลาในเมนูบริการ

ปรับปรุง

นี่คือวิธีอ่านและเปิดรายการไฟล์ที่เราเพิ่งสร้างขึ้น สิ่งนี้จะช่วยให้คุณสามารถเลือกและเลือกไฟล์ที่คุณต้องการเปิดโดยไม่ต้องเปิดทุกไฟล์ในรายการหากคุณไม่ต้องการ

tell application "Finder"
    set file_list to {}
    set my_files to paragraphs of (read "/Users/YourName/path/to/YourFile")
    repeat with nextLine in my_files
        if length of nextLine is greater than 0 then
            copy nextLine to the end of file_list
        end if
    end repeat
    choose from list file_list with multiple selections allowed
    set chosen_Files to the result
    repeat with next_file in chosen_Files
        do shell script "open " & next_file
    end repeat
end tell

หวังว่ามันจะช่วย แจ้งให้เราทราบหากคุณมีปัญหาใด ๆ


1
ขอบคุณมากมันใช้งานได้! เป็นไปได้ไหมที่จะบันทึกไฟล์นี้เป็นPreviewProfile-%date.txt?
เวอร์เนอร์

แน่นอนว่าคุณสามารถ ตรวจสอบคำตอบที่อัพเดต
I0_ol

1
ฉันโหวตให้กับคำตอบนี้ ดูเหมือนจะดีกว่าการพยายามสร้างบางสิ่งโดยใช้สิ่งอำนวยความสะดวกการดีบัก lsof หรือระดับกระบวนการ
DA Vincent

บางทีมันอาจจะเป็นประโยชน์ที่จะเพิ่มคำตอบของคุณวิธีการเปิดไฟล์ด้วยระบบ Preview cat ~/PreviewEnvironments/PreviewProfile_05-15-17.txt | while read; do echo "$REPLY"; open $REPLY; doneในภายหลัง: วิธีนี้จะรักษาช่องว่างและอักขระพิเศษอื่น ๆ การแก้ไขอื่นที่ฉันจะทำคือการเปลี่ยน "/ Users / YourName" โดย "~" ซึ่งจะทำให้มือใหม่ใช้สคริปต์ได้ง่ายขึ้น
เวอร์เนอร์

1
@Werner ดูการอัปเดตของฉันสำหรับการเปิดไฟล์ในรายการ
I0_ol
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.