bir dosyayı panoya kopyalamak için terminal kullanmak


Yanıtlar:


237

Eğer doğru soruyu anlıyorsam, peşinde olduğun şey pbcopyve pbpaste.

Bir terminal aç ve şunu yap:

$ cat ~/Desktop/ded.html | pbcopy

Şimdi bu dosya panoda.

Başka bir yere koymak, yani yapıştırmak için:

$ pbpaste > ~/Documents/ded.html

Şimdi ~ / Documents içinde oturan ded.html dosyasının bir kopyası olmalıdır.


3
Bu, metin dosyalarıyla çalışmak için harikadır, ancak görevi ikili dosyalar ile gerçekleştirmeye çalıştığınızda başarısız olur. Ne demek istediğimi görmek için bunu bir resimle deneyin.
Itai Ferber

7
$ cat ~ / Desktop / ded.html yazdıktan sonra | pbcopy Dosyayı yapıştırmak için cmd + v kullanamıyorum. İşi alt $ pbpaste> ~ / Documents / ded.html yaptı.
öfkeli kivi

Ayrıca, dosya içeriğini OSX panonuzda, Finder ( Düzenleme)> Panoyu Göster menüsünü (Yosemite'de test edilmiştir) bularak da görüntüleyebilirsiniz.
Dannid

Teşekkürler, nasıl okudum ve bir sonraki komuta nasıl geçirdim? mesela cat ~/.emulator_console_auth_token | auth <read_content>?
Dominic

Bu, dosyanın içeriğini kopyalar, ancak dosyanın kendisini kopyalamaz.
vy32

20

Lri'nin cevabı doğru yöne gidiyor ancak birkaç kusuru var: Finder'ı kullanmaya gerek yok ( StandardAdditions OSAX'in bir the clipboardparçası ) ve işleyici verilmesi komut satırından argümanları iletmek için çok daha güvenilir bir yoldur (10.4'ten beri). Bu değişikliklerin her ikisini de yapmak, programa bir kabuk içine girmek için yapılması gereken “kaçmayı” büyük ölçüde kolaylaştırır.run

İşte benim versiyonum (bir kabuk fonksiyonuna sarılmış — .bashrckabukları içinde kullanılabilir hale getirmek için bunu (örneğin) içine koyabilirsiniz ):

file-to-clipboard() {
    osascript \
        -e 'on run args' \
        -e 'set the clipboard to POSIX file (first item of args)' \
        -e end \
        "$@"
}

file-to-clipboard ~/Desktop/ded.html

Panoya bu komut dosyasıyla yerleştirilmiş bir dosya, dosyayı başka bir klasöre kopyalamak için Finder'a yapıştırılabilir .

osascript (10.5'ten beri) bir hash-bang yorumlayıcısı olarak da kullanılabilir. Bunu bir dosyaya koy (örneğin file-to-clipboard)

#!/usr/bin/osascript
on run args
  set the clipboard to POSIX file (first item of args)
end

Dosyayı çalıştırılabilir ( chmod +x /path/to/where/ever/you/put/file-to-clipboard) yapın. Öyleyse şöyle yap:

/path/to/where/ever/you/put/file-to-clipboard ~/Desktop/ded.html

PATH içindeki bir dizinde kayıtlıysa, “script” dosyasının yolunu atlayabilirsiniz.


@ Lri: Finder açık olanı anlamıyor set the clipboard to {one,two}(başka bir AppleScript programı listeyi başarıyla çıkarabilse de). StandardAdditions komutları tek öğelere sınırlı olabilir panoya.
Chris Johnsen

1
Birden fazla dosya için işe yarar mı?
VitalyB

Not: Verilen yol, komut dosyasının çalışması için mutlak bir yol olmalıdır.
Leo,

8

Komut satırını kullanarak yapmaya çalıştığınız şeyi elde etmenin bir yolu yoktur. Apple, metnin temel kopyalamasına izin vermek için pbcopyve pbpastearaçlarını sunarken, aradığınız anlamda bir dosyayı kopyalamak için bu araçları kullanamazsınız.

Çok fazla teknik ayrıntıya girmeden, Finder'da bir dosyayı kullanarak 'kopyaladığınızda' C, aslında dosyanın kendisini kopyalamıyorsunuz, sadece panodaki dosyaya bir referans yapıyorsunuz ve bir dosya referansı olarak işaretliyorsunuz. Yapıştırdığınızda bir uygulama bu referansı aldığında, işleri sıralamak, ne yapıştırdığınızı bulmak ve nihayetinde uygun gördüğü şekilde dosyayla çalışmakla yükümlüdür. Temel olarak, Finder'da bir dosyayı kopyaladığınızda, dosyanın yolunu belirli bir panoya kaydeder ve yapıştırdığınızda, bu dosya yolunu alır ve içeriğini kullanarak yeni bir dosya oluşturmayı bilir. eskisi (bir dosyayı panoya kopyalayın, silin, başka bir yere yapıştırmayı deneyin ve örneğin ne olduğunu görün).

Bu kopyalama ve yapıştırma anlamında, elinizde bulunan araçlar ihtiyacınız olanı yapmak için yeterli değildir. Bojun'un önerdiği gibi, eski dosyanın içeriğini yenisine kopyalamayı deneyebilirsiniz, ancak bu sadece metin dosyaları için iyi çalışacaktır. Alacağınız tüm ikili dosyalar bozulur (bunu bir görüntüyle yapmayı deneyin - bozulur).

Geleneksel komut satırı sizi bu şekilde başarısızlığa uğratır, ancak bunu AppleScript'te yapmak ve ardından bunu komut satırından çağırmak isterseniz bir göz atabilirsiniz osascript.


Resimler konusunda haklısın, vs. bunu düşünmedim. Sanırım soruyu yanlış anladım, çünkü .html dosyasıyla çalışacak pbcopyve pbpasteçalışacak olsa da , bunun nedeni sadece metin dosyası olması.
boehj

Hayır, soruyu doğru anladınız, sadece bu araçların olması gerektiği gibi çalıştığını varsaydınız, yapmıyorlar. Onlar adamcağız ve Apple belgelendirme konusunda gerçekten zayıf bir iş yapmış olsa da, bu şekilde çalışmak bile istemiyorlar. Eğer yazarsanız pbcopy -help, NSLog()tekrar eden, üretime değer olmayan bir hat elde edersiniz 'pbcopy -help'. Bunu anlamak için programcı olmaya yardımcı olur, bu yüzden
içeri girmem

1
Evet, sorun değil. ;)
Itai Ferber

1
Pbcopy'nın dikkatini çekmek isteyen herkes ücretsiz bir geliştirici hesabı alabilir ve bazı hatalar yapabilir - bugreport.apple.com - yardımcı olacağını garanti etmiyor, ancak mühendislere yeteri kadar insan hala dikkat ederse bu şeyler üzerinde çalışmak için zaman ayırır .
bmike

1
OP, CLI'de AppleScript ile istediklerini elde edebilir mi?

7

Aşağıdaki fonksiyon sadece tek bir dosya ile çalışır, birden fazla dosya ile çalışmaz. Çalıştırarak readlinkyükleyebileceğiniz GNU gerektirir brew install findutils.

copy(){ osascript -e{'on run{a}','set the clipboard to posix file a',end} "$(greadlink -f -- "$1")";}

Düzenleme: tell app "Finder"Bloğu kaldırdım .

Düzen 2: Göreceli yolları destekleyen bir sürüme geri döndürülür.


2
Bu gerçekten işe yarıyor!
Bemmu

6

pbcopy < filenameTerminal'de execut komutu, adlandırılmış dosyanın içeriğini kopyalar filename.


3

Bir dosyayı bir hedefe kopyalamak için cpkomutu kullanın.

cp /path/to/file /path/to/destination

Daha man cpfazla bilgi için bkz .


2
Bu, panoya hangi hedef konum olarak referansta bulunduğunu sorulan soruya bir cevap değildir.
kellyfj

2

İşte basit bir Shell / Bash betiği. Sadece .bashrcdosyayı (veya benzeri) yapıştırın :

file-to-clipboard() {
    if [ -z "$1" ]; then
        echo "file path/name:"
        read FILE
    else
        FILE="$1"
    fi
    pbcopy < "$FILE"
}

0

Bağıl dosya desteği ile:

clip_img() {
    osascript -e 'on run argv' \
        -e 'set currentDir to do shell script "pwd"' \
        -e 'set the clipboard to (read POSIX file (POSIX path of (currentDir as text & (first item of argv) )) as JPEG picture)' \
        -e 'end run' "/$1"
    # osascript -e 'clipboard info'
}

clip_img path-to-filepanoya görüntü kopyalamak için çalıştırın ve path-to-filegöreceli olabilir. Dosya jpeg veya png dosyaları olabilir.


-2

Unix ortamlarında cat 'originfile'> 'destinationfile' komutunu kullanabilirsiniz;

windows'daki originfile destinationfile dosyasını kopyala.


2
Bu, dosyayı panoya nasıl yerleştirir?
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.