2016-09-06 20 views
3

file1.txt、file2.txt ... file5.txtという5つのファイルがあり、それぞれをdir1、dir2 ... dir5と呼ばれるそれぞれのディレクトリに移動したいと思います。複数のファイルを複数のディレクトリに移動する

file1.txtがdir1に移動され、file2.txtがdir2に移動されます(以下同様)。

mvxargsをおそらく使用して、コマンドラインでこれを行う方法はありますか?

私はxargsを提案しています。これは、Robert Gambleが提供するanswerの1つのファイルを複数のディレクトリにコピーする方法を尋ねる質問です。

echo dir1 dir2 dir3 | xargs -n 1 cp file1

答えて

0

私は個人的には例えば、forループに依存しているソリューションを好むだろう:

for n in {1..5}; do echo mv -- "file$n.txt" "dir$n/"; done 
#     ^^^^ remove that 

これはxargsで行うことができますが、私は解決策はあまりエレガントであることを見つける:

seq 1 5 | xargs -n1 -I{} echo mv -- "file{}.txt" "dir{}/" 
#      ^^^^ remove that 
+0

、ありがとう!私は実際に実行する前にどのコマンドが実際に実行されるのかを見るために 'echo'を使うことについては考えていませんでした。 ファイル名fileA、fileBなどでソリューションを使用する方法はありますか? – dlynch

+0

AのBのために 'を行うだけです...; 〜をしてください。また、 'echo'はデバッグに役立つものでした。私は偶然それをそこに残しました:-)。私はそれが助けられてうれしいです。 – redneb

+0

「xargs」追加をありがとう。 fileA、fileBなどの質問に関しては、コマンドに2つの入力を与える方法がわかりません。 {A..E}のnのための以下の '; echo mv - "file $ n.txt" "dir $ n";を実行します。 done'はmv fileA.txtをdirAにします。しかし、もし私がfileA.txtをdir1に移動したいのであれば、それは可能でしょうか、それとも全く別の質問でしょうか? – dlynch

0

これは、必ずしも連続した整数のリストではない場合は、dir*は必ずしも存在していなかった。

for f in *.txt; do mkdir dir${f: -5:1}; mv $f dir${f: -5:1}/; done 
0

GNUがあなたがそうだろうパラレル使用:作品

parallel mv {} {=s/file/dir/=} ::: *.txt 
関連する問題