前提・実現したいこと
OS:Linux
rootユーザーで実行する前提
あるディレクトリの中身(ファイル、フォルダ全て)を別のディレクトリに移動させる場合において、
"ファイル属性を維持したまま"で移動させる方法について教えてください。
後述しますが、mvコマンドではダメなのか、を知りたいです。
ファイル属性とは、ファイルのパーミッション、オーナー、タイムスタンプなどを指します。
ここでは、次のようなディレクトリ構成を例に挙げます。(dir1の中身をdir2に移動させる)
dir1
|__subdir1
| |_file1.txt
| |_file2.txt
|_file3.txt
dir2
|__(空っぽ)
確認したいこと
方法は次の3つあると考えています。
1.tarコマンドでディレクトリごとアーカイブ→展開
2.cpコマンドでコピー(+ 元ディレクトリ削除)
3.mvコマンド(+ 元ディレクトリ削除)
1、2の方法で実現できそうであることは確認済みなのですが、
容量が大きかったりファイル数が多いと処理に時間がかかってしまうと思います。
その点、mvコマンドでは(理屈は理解しきれてませんが)
容量が大きい場合などでもすぐに移動できるようです。
以下のサイトを参考にしました。
mvでリネームができるわけをどこまで深く話せますか
試しに、10GBのダミーファイルを作って、cp、mvを比較するとたしかにmvの場合はすぐに移動が終わりました。
よって、mvコマンドでファイル属性を維持したまま移動ができるのか否か?を確認させて頂きたいです。
コマンド実行例(試したこと)
試したコマンドの実行例をそれぞれ記載しておきます。
- tarコマンドの実行例
bash
1tar cf dir1.tar dir1 2tar xf dir1.tar -C dir2 --strip-components 1
tarコマンドではファイル属性を維持したままアーカイブ、展開できることを書籍などで学びました。
dir1のディレクトリ構成そのままで展開すると、dir2/dir1/・・・といた構成になってしまうため
--strip-components 1 で展開後のディレクトリを1階層(dir1/)切り捨てています。
動作確認は問題ありませんでした。
- cpコマンドの実行例
bash
1cp -ap dir1/* dir2/
cpコマンドの場合、-a、-pオプションで属性を維持したままコピーできるようです。
以下のサイトを参考にしました。実際に試してみても問題なさそうです。
【 cp 】コマンド(応用編その2)――属性を保持したままコピーする
- mvコマンドの実行例
bash
1mv dir1/* dir2/
mvのオプションではcpのような属性に関するオプションは見つけられませんでした。
ネットで検索してもあまり情報が見つけられなかったのですが、以下の記事では
「mvで所定のファイルに移動させると、権限や所有者が変わってしまうことがある」
とあります。
Linuxでのファイルの入れ替え(mvコマンド vs cpコマンド)
ただ、これは既存ファイルを上書きした場合の懸念点かなと思っていまして、
先に挙げた例のように、空ディレクトリ(dir2)に移動させる場合とではまた違うのかなとも推測しています。
実際にmvで移動させてみてもパーミッション、オーナー、タイムスタンプは変わっていないようでした。
以上です。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/14 00:39