2016-06-16 15 views
0

最近、コマンドラインを頻繁に使用しています。ダウンロードしたいライブラリのURLを含む.txtファイルを作成しました。xargs、eval、およびmvアンサンブルの使用

$ cat downloads.txt | xargs wget 

wgetコマンドを使用しているとき、私は宛先ディレクトリを指定しませんでした。私は今ダウンロードした各ファイルを "ベンダー"というディレクトリに移動したいと思います。レコードの

、私が...

$ open . 

を実行した場合...私はドラッグ・アンド・ドロップすることができ、目的のディレクトリにこれらのファイルをすることを私に発生しました。しかし、私の意見では、この練習の目的を破るだろう。

私のcwdにファイルがあるので、それらをターゲットにして、それらを "vendor"ディレクトリに移動したいと思っています。

最近の質問:STDOUTに最近作成されたファイルを印刷する便利な方法はありますか?現在、私はかなり単純にこれが生成されます

$ cat downloads.txt | perl -n -e 'if (/(?<=\/)([-.a-z]+)$/) { print $1 . "\n" }' 

次のパイプラインやPerlスクリプト... ...

react.js 
redux.js 
react-dom.js 
expect.js 

を...使用してdownloads.txt内のURLからファイル名をつかむことができましたこれらは目標とするファイルなのですばらしいです私は

$ mv {./,./vendor/}<filename> 
<filename>は「react.js」そして「redux.jsを」である

...、など...これに似ているパイプライン内のコマンドにこれらの行のそれぞれを変換したいのですが。

私はxargseval、およびmvのいくつかの組み合わせを使用してこれを実現することができることを理解。これは私のbashスキルが落ちるところです。

私はこの問題に近づいている方法は単純でも理想的でもないことを再認識しています。これは意図的に私のbashの知識を引き伸ばすことを意図した複雑な運動です。

xargseval、およびmvをどのように使用してこの目標を達成できるのかを知っている人はいますか?

ありがとうございました!

+0

また、私のPerlとRegexのパイプラインを次のように置き換えることができると思います: '$ cat downloads.txt | xargs basename' – wpcarro

+0

正しいディレクトリにあるファイルをいつでも再ダウンロードし、間違ったディレクトリ(CWD)にあったファイルを削除することができます: 'cat downloads.txt | xargs wget -P/directory/'then' catダウンロード| xargs rm' –

+1

あなたは文字通り「ベンダー」を意味しますか?私は正確に理解していない、 'mv *。*ベンダー 'が仕事をすることができるように見える? (ダウンロードされたすべてのファイルにドットが付いている場合) –

答えて

0
xargs -l -a downloads.txt basename | xargs -i mv {} ./vendor 

この仕組み:xargsの最初のインスタンスがdownloads.txtからファイル名を読み取り、個別にこれらのファイル名の各(あるいは、あなたがbasename -aを使用することができます)のためにbasenameを呼び出します。これらの基底名は、別のxargsのインスタンスにパイプされ、引数を使用してmvを呼び出し、文字列{}を現在の引数に置き換えます。

mv $(basename -a $(<downloads.txt)) ./vendor 

この仕組み:あなたは同じディレクトリにすべてのファイルを移動したいので、あなたがmvに単一の呼び出しを使用することができます。コマンド置換( "backticks")は、コマンドbasename -aの出力を挿入し、ファイルから引き数を読み込みます。

関連する問題