Jest to świetne do pracy z plikami tekstowymi, ale zawiedzie, gdy spróbujesz wykonać zadanie z plikami binarnymi. Wypróbuj to z obrazem, aby zobaczyć, co mam na myśli.
Itai Ferber
7
po wpisaniu $ cat ~ / Desktop / ded.html | pbcopy Nie mogę użyć cmd + v do wklejenia pliku. Chociaż $ pbpaste> ~ / Documents / ded.html wykonało zadanie.
zły kiwi
Możesz także wyświetlić zawartość pliku w schowku OSX, przechodząc przez menu Findera Edycja> Pokaż schowek (testowane w Yosemite).
Dannid,
Dzięki, masz pomysł, jak to odczytać i przekazać do następnego polecenia? na przykład cat ~/.emulator_console_auth_token | auth <read_content>?
Dominic
Spowoduje to skopiowanie zawartości pliku, ale nie samego pliku.
vy32
20
Odpowiedź Lri zmierza we właściwym kierunku, ale ma kilka wad: nie ma potrzeby używania Findera ( the clipboardjest częścią StandardAdditions OSAX), a podanie programu runobsługi jest znacznie bardziej niezawodnym sposobem przekazywania argumentów z wiersza poleceń (od 10.4). Dokonanie obu tych zmian znacznie upraszcza „ucieczkę”, którą należy zrobić, aby wejść do programu w powłoce.
Oto moja wersja (zapakowana w funkcję powłoki - możesz ją umieścić (np.) Swoją, .bashrcaby była dostępna w swoich powłokach):
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
Plik, który został umieszczony w schowku za pomocą tego skryptu, można następnie wkleić w Finderze, aby skopiować plik do innego folderu.
osascript może być również używany jako interpreter hash-bang (od 10.5). Umieść to w pliku (np. file-to-clipboard)
#!/usr/bin/osascript
on run args
set the clipboard to POSIX file (first item of args)
end
Ustaw plik jako wykonywalny ( chmod +x /path/to/where/ever/you/put/file-to-clipboard). Następnie uruchom go tak:
@Lri: Finder nie rozumie oczywistości set the clipboard to {one,two}(chociaż inny program AppleScript może pomyślnie wyodrębnić listę). W StandardAdditions schowka polecenia mogą być ograniczone do pojedynczych elementów.
Chris Johnsen
1
Czy działałoby to w przypadku wielu plików?
VitalyB
Uwaga: Podana ścieżka musi być bezwzględną ścieżką do działania skryptu.
Lew
8
Nie ma sposobu, aby osiągnąć to, co próbujesz zrobić za pomocą wiersza polecenia. Chociaż Apple oferuje narzędzia pbcopyi pbpastepozwalające na podstawowe kopiowanie tekstu, nie możesz używać tych narzędzi do kopiowania pliku w takim znaczeniu, w jakim szukasz.
Bez wchodzenia w zbyt szczegółowe szczegóły techniczne, kiedy „kopiujesz” plik w Finderze za pomocą ⌘C, tak naprawdę nie kopiujesz samego pliku, tylko czyniąc odniesienie do pliku w schowku i oznaczając go jako odwołanie do pliku. Kiedy aplikacja otrzymuje to odniesienie podczas wklejania, ma obowiązek uporządkowania, znalezienia wklejonych elementów i ostatecznie pracy z plikiem, który uzna za odpowiedni. W istocie, gdy kopiujesz plik w Finderze, zapisuje on ścieżkę do pliku w określony sposób do określonego schowka, a po wklejeniu otrzymuje ścieżkę do pliku i wie, jak utworzyć nowy plik przy użyciu zawartości stary (skopiuj plik do schowka, usuń go, spróbuj wkleić go gdzie indziej i na przykład zobacz, co się stanie).
W tym sensie kopiowania i wklejania dostępne narzędzia nie wystarczą, aby zrobić to, czego potrzebujesz. Jak sugerował boehj, możesz spróbować skopiować zawartość starego pliku do nowego, ale będzie to działać dobrze tylko w przypadku plików tekstowych. Wszystkie otrzymane pliki binarne zostaną uszkodzone (spróbuj zrobić to z obrazem - zostanie uszkodzony).
Tradycyjny wiersz poleceń zawiedzie Cię w ten sposób, ale możesz rzucić okiem, jeśli chcesz to zrobić w AppleScript, a następnie wywołać to za pomocą wiersza polecenia osascript.
Masz rację co do obrazów itp. Nie myślałem o tym. Wydaje mi się, że źle zrozumiałem pytanie, ponieważ chociaż pbcopyi pbpastebędę działać z plikiem .html, to tylko dlatego, że akurat jest to plik tekstowy.
boehj
Nie, dobrze zrozumiałeś pytanie, po prostu założyłeś, że te narzędzia działały tak, jak powinny, a nie. Są błędne i nawet nie mają tak działać, chociaż Apple wykonało naprawdę kiepską pracę nad dokumentacją. Jeśli wpiszesz pbcopy -help, otrzymasz NSLog()powtarzającą się linię, która nie jest warta produkcji 'pbcopy -help'. Zrozumienie tego pomaga być programistą i dlatego czułem, że trzeba wejść.
Itai Ferber
1
Tak, nie ma problemu. ;)
Itai Ferber
1
Każdy, kto chce zwrócić uwagę pbcopy, może uzyskać bezpłatne konto programisty i zgłosić kilka błędów - bugreport.apple.com - nie ma gwarancji, że to pomoże, ale daje inżynierom siłę, aby uzyskać czas na pracę nad tymi rzeczami, jeśli wystarczająca liczba osób nadal będzie dbać .
bmike
1
Czy OP może osiągnąć to, czego chcą, dzięki AppleScript na CLI?
7
Poniższa funkcja działa tylko z jednym plikiem, a nie z wieloma plikami. Wymaga GNU, readlinkktóry można zainstalować, uruchamiając brew install findutils.
copy(){ osascript -e{'on run{a}','set the clipboard to posix file a',end} "$(greadlink -f -- "$1")";}
Edycja: usunąłem tell app "Finder"blok.
Edycja 2: Przywrócono wersję, która obsługuje ścieżki względne.
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'}
uruchom, clip_img path-to-fileaby skopiować obraz do schowka, i path-to-filemoże być względny. Plik może być plikiem JPEG lub PNG.
Odpowiedzi:
Jeśli dobrze rozumiem pytanie, to, czego szukasz, to
pbcopy
ipbpaste
.Otwórz terminal i wykonaj:
$ cat ~/Desktop/ded.html | pbcopy
Teraz ten plik jest w schowku.
Aby umieścić go w innym miejscu, to znaczy wkleić, wykonaj:
$ pbpaste > ~/Documents/ded.html
Teraz powinieneś mieć kopię pliku ded.html siedzącego w ~ / Documents.
źródło
cat ~/.emulator_console_auth_token | auth <read_content>
?Odpowiedź Lri zmierza we właściwym kierunku, ale ma kilka wad: nie ma potrzeby używania Findera (
the clipboard
jest częścią StandardAdditions OSAX), a podanie programurun
obsługi jest znacznie bardziej niezawodnym sposobem przekazywania argumentów z wiersza poleceń (od 10.4). Dokonanie obu tych zmian znacznie upraszcza „ucieczkę”, którą należy zrobić, aby wejść do programu w powłoce.Oto moja wersja (zapakowana w funkcję powłoki - możesz ją umieścić (np.) Swoją,
.bashrc
aby była dostępna w swoich powłokach):Plik, który został umieszczony w schowku za pomocą tego skryptu, można następnie wkleić w Finderze, aby skopiować plik do innego folderu.
osascript może być również używany jako interpreter hash-bang (od 10.5). Umieść to w pliku (np.
file-to-clipboard
)Ustaw plik jako wykonywalny (
chmod +x /path/to/where/ever/you/put/file-to-clipboard
). Następnie uruchom go tak:Jeśli jest przechowywany w katalogu w ścieżce, możesz pominąć ścieżkę do pliku „skryptowego”.
źródło
set the clipboard to {one,two}
(chociaż inny program AppleScript może pomyślnie wyodrębnić listę). W StandardAdditions schowka polecenia mogą być ograniczone do pojedynczych elementów.Nie ma sposobu, aby osiągnąć to, co próbujesz zrobić za pomocą wiersza polecenia. Chociaż Apple oferuje narzędzia
pbcopy
ipbpaste
pozwalające na podstawowe kopiowanie tekstu, nie możesz używać tych narzędzi do kopiowania pliku w takim znaczeniu, w jakim szukasz.Bez wchodzenia w zbyt szczegółowe szczegóły techniczne, kiedy „kopiujesz” plik w Finderze za pomocą ⌘C, tak naprawdę nie kopiujesz samego pliku, tylko czyniąc odniesienie do pliku w schowku i oznaczając go jako odwołanie do pliku. Kiedy aplikacja otrzymuje to odniesienie podczas wklejania, ma obowiązek uporządkowania, znalezienia wklejonych elementów i ostatecznie pracy z plikiem, który uzna za odpowiedni. W istocie, gdy kopiujesz plik w Finderze, zapisuje on ścieżkę do pliku w określony sposób do określonego schowka, a po wklejeniu otrzymuje ścieżkę do pliku i wie, jak utworzyć nowy plik przy użyciu zawartości stary (skopiuj plik do schowka, usuń go, spróbuj wkleić go gdzie indziej i na przykład zobacz, co się stanie).
W tym sensie kopiowania i wklejania dostępne narzędzia nie wystarczą, aby zrobić to, czego potrzebujesz. Jak sugerował boehj, możesz spróbować skopiować zawartość starego pliku do nowego, ale będzie to działać dobrze tylko w przypadku plików tekstowych. Wszystkie otrzymane pliki binarne zostaną uszkodzone (spróbuj zrobić to z obrazem - zostanie uszkodzony).
Tradycyjny wiersz poleceń zawiedzie Cię w ten sposób, ale możesz rzucić okiem, jeśli chcesz to zrobić w AppleScript, a następnie wywołać to za pomocą wiersza polecenia
osascript
.źródło
pbcopy
ipbpaste
będę działać z plikiem .html, to tylko dlatego, że akurat jest to plik tekstowy.pbcopy -help
, otrzymaszNSLog()
powtarzającą się linię, która nie jest warta produkcji'pbcopy -help'
. Zrozumienie tego pomaga być programistą i dlatego czułem, że trzeba wejść.Poniższa funkcja działa tylko z jednym plikiem, a nie z wieloma plikami. Wymaga GNU,
readlink
który można zainstalować, uruchamiającbrew install findutils
.Edycja: usunąłem
tell app "Finder"
blok.Edycja 2: Przywrócono wersję, która obsługuje ścieżki względne.
źródło
Wykonanie
pbcopy < filename
polecenia w terminalu kopiuje zawartość pliku o nazwiefilename
.źródło
Aby skopiować plik do miejsca docelowego, użyj
cp
polecenia.Zobacz
man cp
więcej informacji.źródło
Oto prosty skrypt Shell / Bash. Po prostu wklej go do swojego
.bashrc
pliku (lub podobnego):źródło
Przy wsparciu względnego pliku:
uruchom,
clip_img path-to-file
aby skopiować obraz do schowka, ipath-to-file
może być względny. Plik może być plikiem JPEG lub PNG.źródło
Możesz użyć cat 'originfile'> 'destinationfile' w środowiskach unix;
skopiuj plik docelowy pliku źródłowego w systemie Windows.
źródło