コピーせずにファイルの内容をより深く移動する方法

コピーせずにファイルの内容をより深く移動する方法

にファイルがあります/home/jjblack/foo/。そのディレクトリのすべての内容をに移動したいと思います/home/jjblack/foo/bar/

ディスク容量が不足しているため、他の場所にコンテンツをコピーできません。私はできます。

mv /home/jjblack/foo /home/jjblack/xyz
mkdir /home/jjblack/foo
mv /home/jjblack/xyz /home/jjjblack/foo/bar

しかし、これよりもエレガントなワンラインソリューションがありますか?

答え1

ここに短縮されたパス名を含むコマンドシーケンスは、jjblack現在のユーザーを想定しています(~jjblack代わりに別のものを使用してください~)。

mv ~/foo ~/xyz
mkdir ~/foo
mv ~/xyz ~/foo/bar

これはとてもエレガントだと思います。欠落している唯一のことは、前のコマンドが失敗した場合に次のコマンドが実行されないことを保証するいくつかの安全チェックです。

[ ! -e ~/xyz ] &&
mv ~/foo ~/xyz &&
mkdir ~/foo &&
mv ~/xyz ~/foo/bar

または1行に入力する必要がある場合:

[ ! -e ~/xyz ] && mv ~/foo ~/xyz && mkdir ~/foo && mv ~/xyz ~/foo/bar

これは、「単純なコマンド」の「ANDリスト」で構成される単一の「完全なコマンド」(シェル構文の意味)です。

これにより、隠された名前に関する問題が回避され、潜在的に何百万もの名前のリストが生成されるワイルドカードパターンが拡張されず、個々のファイルを移動しようとせず(個々のディレクトリを移動するよりも遅くなります)、大規模な追加ファイル使用しません。ファイルストレージスペース。さらに、元のディレクトリのメタデータ(所有権や権限など)が新しいfoo名前に正常に移動されましたbar

同じことを行うもう1つの方法は、最初に新しい親ディレクトリを作成し、最後に名前を変更することです。これにより-e、名前がすでに存在する場合にmkdir失敗するテストを削除できます。~/xyz

mkdir ~/xyz &&
mv ~/foo ~/xyz/bar &&
mv ~/xyz ~/foo

答え2

cd /home/jjblack/foo
mkdir bar && mv * bar/

関連情報