Kopieren Sie eine Datei / ein Verzeichnis von der Befehlszeile und fügen Sie sie ein

17

Anstatt den folgenden Befehl zu verwenden:

cp {Quelldatei} {Zieldatei}

Ich möchte eine Datei in die Zwischenablage kopieren und an einer anderen Stelle in ein anderes Verzeichnis einfügen können. etwas wie das:

/ usr / local / dir1 # cp {Quelldatei}
/ usr / local / dir1 # cd / usr / local / dir2
/ usr / local / dir2 # einfügen

Ist es möglich?

Meysam
quelle

Antworten:

17

Ich denke, Sie sollten so etwas tun wie die GUI-Anwendungen. Meine Idee dazu ist, zwei Funktionen für Kopieren und Einfügen zu schreiben, wobei Kopieren den Pfad von Dateien schreibt, die in eine temporäre Datei kopiert werden sollen, und Einfügen diese Pfade liest und einfach den cpBefehl aufruft . Meine Implementierung (in .bashrcDatei zu legen ) ist wie folgt:

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
}

Es könnten bessere Skripte geschrieben werden, um diese Idee umzusetzen. Ich habe meine eigenen getestet und es funktioniert sehr gut für Dateien und Ordner (ich weiß nicht, wie xclipman Ordner kopieren kann !!)


Beispielsweise:

/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
quelle
1
Das wirkt wie ein Zauber!
Meysam
2
Ich mag diese Idee. Und mit kleinen Änderungen können Sie sogar eine "Schnitt" -Funktion implementieren.
Pablo Venturino
@Gilles Könnten Sie bitte erklären , warum Sie ersetzt echomit printf?
Meysam
@Meysam Auch unter arbeiten shopt -s xpg_echo.
Gilles 'SO- hör auf böse zu sein'
1
@Meysam printfist portabel und sicher, solange echoes nicht ist. Das Wooledge-Wiki erwähnt dies kurz.
JW013
10

Ich schlage vor, xclip. Ich benutze es die ganze Zeit dafür. aber du brauchst kein script. benutze einfach Funktionen.

Ich sehe keine Notwendigkeit, diese Skripte zu verwenden, insbesondere, weil, wenn Sie tun, was ich denke, dass Sie tun, Sie die bereits erwähnten Skripte (auf dem hilfreichen Linux-Leckerbissen-Blog) als ärgerlich empfinden, weil sie Sie, wo immer möglich , zur Eingabe auffordern Sie zu benutzen, widerspricht der Unix-Philosophie.

Ich schlage vor, nur einige Funktionen in Ihre zu schreiben .bashrc:

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

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

Um diese zu verwenden, müssen Sie apt-get install xclip(Debian, Ubuntu, Linux Mint usw.) oder zypper in xclip(openSUSE, andere RPM-basierte Systeme) oder ein gleichwertiges Programm verwenden. Das Programm sollte auf jedem von Ihnen verwendeten System verfügbar sein.

ixtmixilix
quelle
3

Hierfür können Sie den xclipBefehl verwenden. Sie können Bash-Skripte von diesem Link herunterladen und Aliase für bash cp2clipund bash clippastein Ihre .bashrcDatei einfügen .

harish.venkat
quelle
@was meinst du mit Aliase?
ixtmixilix
Ich meinte, die Dateien in Ihrem Home-Verzeichnis zu behalten und zwei Aliase in Ihrem .bashrc-Alias ​​zu platzieren Sie können diese überall verwenden. Weitereman alias
Informationen zu