Skopiuj i wklej plik / katalog z wiersza poleceń

17

Zamiast używać następującego polecenia:

cp {plik źródłowy} {dest file}

Chcę móc skopiować plik do schowka i wkleić go gdzie indziej, w innym katalogu. coś takiego:

/ usr / local / dir1 # cp {plik źródłowy}
/ usr / local / dir1 # cd / usr / local / dir2
/ usr / local / dir2 # paste

Czy to możliwe?

Meysam
źródło

Odpowiedzi:

17

Myślę, że powinieneś zrobić coś takiego jak aplikacje GUI. Moim pomysłem na zrobienie tego jest napisanie dwóch funkcji dla Kopiuj i Wklej, gdzie Kopiowanie zapisuje ścieżkę plików do skopiowania do pliku tymczasowego, a Wklej czyta te ścieżki i po prostu wywołuje cppolecenie. Moja implementacja (do umieszczenia w .bashrcpliku) jest jak poniżej:

function Copy {
    touch ~/.clipfiles
    for i in "$@"; do
      if [[ $i != /* ]]; then i=$PWD/$i; fi
      i=${i//\\/\\\\}; i=${i//$'\n'/$'\\\n'}
      printf '%s\n' "$i"
    done >> ~/.clipfiles
}

function Paste {
    while IFS= read src; do
      cp -Rdp "$src" .
    done < ~/.clipfiles
    rm ~/.clipfiles
}

Lepsze skrypty można napisać dla wdrożenia tego pomysłu, przetestowałem swój własny i działa on bardzo dobrze dla plików i folderów (nie wiem, jak xclipmożna kopiować foldery !!)


Na przykład:

/usr/local/dir1# Copy a.txt *.cpp
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# Paste

/usr/local/dir1# Copy *.h *.cpp b.txt subdir1
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# Paste

/usr/local/dir1# Copy a.txt b.txt 
/usr/local/dir1# cd /usr/local/dir2
/usr/local/dir2# Copy c.txt d.txt
/usr/local/dir2# cd /usr/local/dir3
/usr/local/dir3# Paste
saeedn
źródło
1
To działa jak urok!
Meysam
2
Podoba mi się ten pomysł. A przy niewielkich modyfikacjach można nawet wdrożyć funkcję „wycinania”.
Pablo Venturino
@Gilles Czy mógłbyś wyjaśnić, dlaczego otrzymuje echoz printf?
Meysam,
@Meysam Aby pracować nawet pod shopt -s xpg_echo.
Gilles „SO- przestań być zły”
1
@Meysam printfjest przenośny i bezpieczny, podczas gdy echonie jest. Wiki Wooledge krótko o tym wspomina .
jw013
10

sugeruję xclip. używam tego cały czas. ale nie potrzebujesz skryptu. po prostu użyj funkcji.

nie widzę potrzeby korzystania z tych skryptów, w szczególności, ponieważ jeśli robisz to, co myślę, robisz, okaże się, że skrypty już wspomniane (na pomocnym blogu linux tidbits) są denerwujące, ponieważ proszą cię o podanie, tam gdzie to możliwe , po prostu używać ich, w przeciwieństwie do filozofii unix.

proponuję po prostu napisać kilka funkcji w swoim .bashrc:

clip2file () {
  xclip -out -selection clipboard >> $@
  echo -e "\n" >> $@
}

file2clip () {
  cat $@ | xclip -selection clipboard
}

aby z nich skorzystać, musisz apt-get install xclip(Debian, Ubuntu, Linux Mint itp.) lub zypper in xclip(openSUSE, inne systemy oparte na .rpm) lub jakiś równoważny. program powinien być dostępny na każdym używanym systemie.

ixtmixilix
źródło
3

Możesz użyć xclipdo tego polecenia. Można pobrać skrypty bash z tego linka i umieścić na aliasy bash cp2clipi bash clippastedo swojego .bashrcpliku.

harish.venkat
źródło
@ co rozumiesz przez aliasy?
ixtmixilix
miałem na myśli zachować pliki w katalogu domowym i umieścić dwa aliasy w aliasie .bashrc cp2clip = 'bash / home / <nazwa użytkownika> /cp2clip.sh' i clippaste = 'bash / home / <nazwa użytkownika> /clippaste.sh', więc możesz ich używać w dowolnym miejscu. Aby dowiedzieć się więcej na temat aliasów można zobaczyć man aliaslub linfo.org/alias.html
harish.venkat