"mv ./* ./subdirdir/"を実行する正しい方法は何ですか? [コピー]

現在のディレクトリには多くのファイルとディレクトリがあります。すべてのファイルをサブディレクトリに移動したいと思います。

mv ./* subdir/
cannot move ./subdir to a subdirectory of itself...

警告は無害ですが、mvが1を返すため、他のファイルが移動されたことを確認できません。

cpは役に立ちますが、移動する大容量ファイルがあるため、十分に効率的ではありません。

スクリプトも機能しているようですが、可能であれば1行をお勧めします。

ベストアンサー1

以下を検索してこれを実行できます。

$ find -maxdepth 1 -not -name subdir -print0 | xargs -0 mv -t subdir

どこ:

  • -maxdepth 1検索巡回を現在のディレクトリに制限します(POSIXオプションではありませんが、GNUなどで利用可能ですfind)。
  • -print0findにゼロバイトで行を終了するように指示します。したがって、コマンドはPOSIXではありませんが、GNUが提供する珍しいファイル名(改行文字など)を処理できます。find
  • -00バイトを教えてくださいxargs。繰り返しますが、POSIXではありませんが、例えばGNUでは理解されています。xargs
  • -t最初の引数がターゲット(最後の引数ではない)であることを示しますmv。これはこのユースケースに最適です。以前と同様に、オプションはPOSIXにはありませんが、たとえばGNUによって実装されています。mv

おすすめ記事