web-dev-qa-db-ja.com

コマンドラインからファイル/ディレクトリをコピーして貼り付けます

次のコマンドを使用する代わりに:

cp {ソースファイル} {宛先ファイル}

ファイルをクリップボードにコピーし、別のディレクトリのどこかに貼り付けられるようにしたい。このようなもの:

/ usr/local/dir1# cp {ソースファイル}
/ usr/local/dir1# cd/usr/local/dir2
/ usr/local/dir2#貼り付け

出来ますか?

17
Meysam

GUIアプリケーションと同じようにすべきだと思います。これを行うための私のアイデアは、コピーと貼り付けの2つの関数を書くことです。コピーでは、コピーするファイルのパスを一時ファイルに書き込み、貼り付けでは、それらのパスを読み取り、cpコマンドを呼び出すだけです。私の実装(.bashrcファイル)は以下のようになります:

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
}

このアイデアを実装するためのより良いスクリプトを書くことができます。私は自分でテストしましたが、ファイルとフォルダーに対して非常にうまく機能します(xclipがフォルダーのコピーにどのように機能するかわかりません!!)


例えば:

/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
17
saeedn

xclipをお勧めします。私はこれのためにいつもそれを使います。しかし、スクリプトは必要ありません。関数を使用するだけです。

特に、これらのスクリプトを使用する必要はありません。自分がやっていることを実行している場合は、(役立つLinux tidbitsブログで)すでに言及されているスクリプトは、入力を要求するので煩わしいでしょう可能な限り、それらを使用するためだけに、unixの哲学に反します。

いくつかの関数を.bashrc

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

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

これらを使用するには、apt-get install xclip(Debian、Ubuntu、Linux Mintなど)またはzypper in xclip(openSUSE、その他の.rpmベースのシステム)または同等のもの。プログラムは、使用しているどのシステムでも使用できる必要があります。

10
ixtmixilix

これにはxclipコマンドを使用できます。 このリンク からbashスクリプトをダウンロードし、bash cp2clipおよびbash clippasteのエイリアスを.bashrcファイルに追加できます。

3
harish.venkat