すべてのディレクトリを同じフォルダー内の単一のディレクトリに効率的に移動するにはどうすればよいですか?

すべてのディレクトリを同じフォルダー内の単一のディレクトリに効率的に移動するにはどうすればよいですか?

「target」というフォルダーを含む 1 つのフォルダーに 100 個のファイルがあります。このフォルダー内のすべてのファイルをフォルダー target に移行したいと考えています (target フォルダー自体は除く)。

これを行うための効率的なターミナルコマンドはありますか?

答え1

ディレクトリ内にファイル (およびディレクトリ ターゲット) のみがある場合は、 ではmvなくを使用しますfind

mv * target

「ターゲット」はそれ自体では移動できないというエラーが表示されますが、その後、ファイルはすべてターゲット内に移動します。

答え2

これを使って

$ mv target ..
$ mv * ../target
$ mv ../target .

答え3

これも同様に機能します:

find . -maxdepth 1 ! -name target ! -name . -exec mv "{}" target \;

bash 補完に頼りすぎることの主な利点の 1 つは、find隠しファイルも同時に取得できることです。mv * ...これは行いません。

おそらく次のようなものになると思います:

mv -t target * .[^.]*

または、James が指摘しているように、find コマンドを簡略化してファイルのみを検索するようにすることもできます... また、LoremIpsum が指摘したように、ファイルが数十億ある場合は、次のようにするとxargs少し効率的になります。

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t target

答え4

宛先ディレクトリを前のディレクトリに移動し、すべてのものをそこに移動し、最後に現在のディレクトリに戻すというアプローチは問題ありません。唯一の問題は、履歴を保持する必要のある git プロジェクト ディレクトリでは機能しないことです。

したがって、git ディレクトリの場合は次のように移動します。git mv * ターゲット -k

-kオプションは移動/名前変更エラーをスキップするために使用されます

関連情報