小さいファイルを優先してファイルを移動できますか?

小さいファイルを優先してファイルを移動できますか?

サイズ順にファイルを移動することは可能ですか?

のように:

mv /path/to/x /path/to/y

ここで、x と y はディレクトリです。ただし、小さいファイルが最初に移動されます。または、大きいファイルが最初に移動されます。

また、これを行わない理由はあるのでしょうか?

答え1

次のように実行できます (未テスト):

for file in `ls --sort=size /path/to/x/*`; do mv $file /path/to/y/; done

ls に --reverse パラメータを追加すると、並べ替えを逆にすることができます。ファイル名にスペースが含まれている場合は、$file を引用符で囲む必要がある場合があります。

... mv "$file" /path/to/y/ ...

ファイル名に二重引用符が含まれている可能性がある場合は、本当に困ったことになります。

次のようにすることも考えられますが、これは mv の実装に依存し、多くのファイルでは機能しない可能性があります (ファイル名にスペースや引用符が含まれていると、依然として問題が発生します)。

mv `ls --sort=size /path/to/x/*` /path/to/y/

「これをしない理由はありますか?」と尋ねます。この質問は逆にする必要があります。これをする理由はありますか?理由があるなら、先に進んで実行してください。

答え2

ファイルを移動する場合単一のファイルシステム内とすると、ファイル内のデータは移動されず、ファイル名のみがディレクトリ間で移動されます。したがって、10 ギガバイトのファイルを瞬時に移動できます (単一のファイルシステム内)。したがって、最も小さいファイルを最初に移動できるようにするために、すべてのファイルのサイズを調べる手間をかけるのは時間の無駄です (この場合)。

答え3

これを行わない理由は、移動する前にすべてのファイルのインデックスを作成する必要があるためです。次に、すべてのファイルのサイズを取得して並べ替えます。前にコピーを開始することもできます。

そして、コピー処理の前に計算した状態が全く同じであるという保証はありませんその間コピープロセスは無意味になります。

関連情報