複数のファイルを特定の宛先ディレクトリに一度に移動する方法は?


152

いくつかのディレクトリに(他の多くのファイルとともに)移動したいファイルがたくさんありました。

幸いなことに、移動したいすべてのファイルには名前に特定の識別子が含まれているためls | grep IDENTIFIER、移動するファイルの正確なリストを取得できます。

しかし、mv file /path/to/dest/folder/1つずつではなく一度に実行するにはどうすればよいですか(移動するファイルがたくさんあります)?

回答:


100

ABC-IDENTIFIER-XYZ.extまたはに移動する場合はIDENTIFIER-XYZ.xml、次を使用できます。

mv *IDENTIFIER* ~/YourPath/

*0個以上の文字のワイルドカードであり、これは0個以上の文字を意味しIDENTIFIER、その後に0個以上の文字が続きます

これにより、指定したファイルを含むすべてのファイルが移動しIDENTIFIERます。


201

使用できます

mv -t DESTINATION file1 file2 file3

そして

mv -t DESTINATION `ls|grep IDENTIFIER`

動作しますが、grepが一致するたびに新しい行を出力するため、mvが複数回呼び出されるかどうかはわかりません。


5
Linuxで動作しますが、Macで動作するかどうかはわかりません
Alexander Mills

3
windwowsのgitを介してmacおよびgit bashで動作します。
ブラントSolovij

11
Mac(10.11.16 El Capitan)では機能しません。しかし、単にターゲットフォルダーを後ろに置くことができます。例mv file1 file2 ... destination
Sheljohn

2
-1第二のアプローチのためには、以下を含むファイルのために落ちるように新しい行
αғsнιη


24

ワイルドカードを使用できます。

例:拡張子が.docのすべてのファイルを移動するには

mv *.doc /path/to/dest/folder/

これにより、現在のディレクトリの下にあるすべてのドキュメントファイルが特定の宛先に移動します。

編集

コメントに答えるため。

mv *.ext *.xml *.txt /path/to/dest/folder/


2
ただし、移動するファイルのリストは拡張子によって決定されません。ファイルの一部の名前は次のとおりです。ABC-IDENTIFIER-XYZ.extそして、いくつかは、ちょうどIDENTIFIER-XYZ.extすべてのほとんどは、異なる拡張子を持ちますxmlproperties
ギラッドのHOCH

@giladhoch編集されたものはどうですか?
アチュ

@gliadhoch grepの使用に非常に満足している場合は、上/下で私の答えを見ることができます。
点火

.xml移動したくない他のファイル(たとえば)があるため、動作しません。
ギラッドのHOCH

20

無関係なファイルのセット(名前とタイプに共通のパターンはありません)を移動する場合は、Rajanand氏が言ったようにできます。まず、移動するファイルが含まれているディレクトリに移動します。

mv file1.ext1 file2.ext2 file3.ext3.. /destination/

ファイルが異なるディレクトリに散在している場合、moveコマンドで各ファイルのパスを指定するだけです。


10

私はtuomazのテクニックを使用しますが、わずかに変更しました:

mv file1 file2 file3 -t DESTINATION

これは、バニラmv操作と同じ順序を使用しているため、覚えやすく、ねじ込みにくくなっています。

mv file1 DESTINATION

のmanページにmv-tオプションが記載されていません。
ヌメノン

2
linux.die.net/man/1/mvはい、それはない
geoyws

7

次のコマンドを使用します。

mv `ls|grep IDENTIFIER` /path/to/dest/folder  

ただし、この種の使用にはlsはお勧めしません。代わりにfindコマンドを使用してください。


8
lsこのような使用にはお勧めしません。特にgrep背後にあるファイルを一覧表示する場合は、を使用しますfind . -name \*IDENTIFIER\*
NorTicUs

この回答は、mvで前のコマンドの出力をどのように使用できるかを示すためのものです。ls | grepが質問で言及されたので、私はそれをコピーしました。
点火

3
@NorTicUsが述べたように、lsの使用はお勧めできません。また、スペースを含むファイルは問題を引き起こす可能性があります。
水田ランダウ


5

移動するファイルが非常に多い場合、実際にはmvコマンド(またはのような他のコマンドrm)に対して多すぎることがあります。xargsループのように各ファイルを個別に移動する方法を使用することをお勧めします。それを回避する1つの方法は次のとおりです。

ls -1 | grep IDENTIFIER | xargs -i mv {} /path/to/dest/folder/

ls -1(マイナス1)各行に一つだけのファイル名が存在することを保証します。lsコマンドのエイリアスが非表示になっている場合は、1行に複数のファイル名を付けて、移動するつもりのないファイルを誤って移動してしまう可能性があります。


これは、IDENTIFIERをワイルドカードに簡単に変換できない場合や、より複雑な正規表現でgrepを使用する場合にも役立ちます。
アギービル

1
xargsの場合は+1。findはほとんどの場合、lsよりも優れていて安全です。見つける 。IDENTIFIER -exec mv {} / path / to / dest / folder \; (テストされていないコード)。現在の作業ディレクトリ用です。\; 実行するコマンドを終了します。実行内容によっては、-maxdepth 1を追加して、サブディレクトリに再帰しないようにする必要があります。
ジョー

5

ファイルが同じディレクトリにある場合は、使用できます

mv /path/to/source/dir/{file1,file2,*.ext1,*.ext2} /path/to/destination/

(Ubuntu 16.04でテスト済み)


1
これは実際に既存の回答に何かを追加するものではありませんよね?
デザート

1
ただ、ファイルごとにディレクトリへのフルパスを指定する必要がありません
Sruli

3
find -type f -name "[range]" -exec mv {} target-directory ';'

このコマンドは、任意のパターン/範囲のファイル名をターゲットディレクトリに移動します。

例えば。

find -type f -name "file[1-50000]" -exec mv {} target-directory ';'

それはのような名前のファイルを移動しますfile1file2... file50000target-directory


2

lsからの出力を使用して、mv commnadに入力できます。

mv $(ls | grep IDENTIFIER) /path/to/dest/dir

間のコマンドは$()、検索に一致するファイル名のリストを返します。これは、mvコマンドのパラメーターとして提供できます。



1

このコマンドを使用すると、複数のファイルを移動できます。

mv SourceFilenames ~DestinationPath


1

一番簡単な方法はこんな感じ

mv {file1,file2,file3} DESTINATION

またはディレクトリ

mv {directory1,directory2,directory3} DESTINATION

またはファイルとディレクトリの両方

mv {file1,file2,file3,directory1,directory2,directory3} DESTINATION

お役に立てれば

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.