1

コマンドとその結果をターミナルで書き込むときに、Ubuntu でパイプする方法を教えてください。次のコマンドを順番に記述します-

$ ls | grep ab
abc.pdf
cde.pdf
$ cp abc.pdf cde.pdf files/

最初のコマンドの結果を 2 番目のコマンドにパイプし、それらをすべて同じ行に書き込みたいと思います。それ、どうやったら出来るの ?

何かのようなもの

$ cp "ls | grep ab" files/

(上記は不自然な例であり、次のように記述できますcp *.pdf files/

4

3 に答える 3

6

さて、xargs 担当者が諦めたので、私の xargs ソリューションを提供します。

ls | grep ab | xargs echo | while read f; do cp $f files/; done

もちろん、このソリューションには明らかな欠点があります。ファイルにスペースが含まれていると混乱が生じるということです。

この欠陥のない xargs ソリューション? うーん...

ls | grep ab | xargs '-d\n' bash -c 'docp() { cp "$@" files/; }; docp "$@"'

少しぎこちなく見えますが、うまくいきます。返品を含むファイルがない限り、つまり。ただし、それを行う人は誰でも、得られるものに値します。それでも解決可能です:

find . -mindepth 1 -maxdepth 1 -name '*ab*' -print0 | xargs -0 bash -c 'docp() { cp "$@" files/; }; docp "$@"'
于 2012-07-21T18:14:09.463 に答える
6

以下を使用します。

cp `ls | grep ab` files/
于 2012-07-21T17:48:36.740 に答える
4

xargs を使用するには、ファイル名引数が cp コマンドに渡される最後の引数であることを確認する必要があります。-tターゲット ディレクトリを指定する cp のオプションを使用して、これを実現できます。

ls | grep ab | xargs cp -t files/

もちろん、これは不自然な例ですが、 ls の出力を解析するべきではありません

于 2012-07-21T20:31:53.703 に答える