Linuxターミナルを使用して、現在のディレクトリのすべてをサブディレクトリにコピーするにはどうすればよいですか?
フォルダーの内容を再帰的にコピーしたい場合(1つのエラーがスローされますが、以下の代替案):
cp -r * sub/
もう少しハッキーですが、空ではないサブディレクトリで動作します:
TARGETDIR='targetdir here';cp -r `find . -maxdepth 1 ! -name "$TARGETDIR"` "$TARGETDIR"
別のワンライナー:
TARGETDIR='targetdir here';for file in *;do test "$file" != "$TARGETDIR" && cp "$file" "$TARGETDIR/";done
または再帰:
TARGETDIR='z';for file in *;do test "$file" != "$TARGETDIR" && cp -r "$file" "$TARGETDIR/";done
シェルがbashの場合、target
がターゲットサブディレクトリの名前だとします。
_shopt -s extglob
cp -r !(target) target/
_
Kshでは、直接cp -r !(target) target/
を実行できます。
Zshでは、_setopt ksh_glob
_、次にcp -r !(target) target/
を実行できます。別の可能性は、_setopt extended_glob
_の次に_cp -r ^target target/
_です。
ターゲットディレクトリをソースディレクトリの外に移動してから、元に戻すことをお勧めします。 mvは無料です(別のファイルシステムに移動しないように注意している場合)。ただし、他のプロセスが干渉する/干渉されることを予期している場合を除きます。
上記のほとんどの解決策は、ファイル名にスペースが含まれていると機能しません。 find -print0のバリアントを使用することをお勧めします| xargs -0、またはfind -execなど。
これでうまくいきますか?
cp -r * subdir/
現在のディレクトリのすべてをサブディレクトリにコピーする代わりに移動するつもりなら、次のようにすることができます:
mv * subdir/