是否可以按大小顺序移动文件?
喜欢:
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 GB 的文件(在单个文件系统内)。因此,费尽心思查找所有文件的大小只是为了先移动最小的文件,这将是浪费时间(在这种情况下)。
答案3
不这样做的原因是,这需要您在移动之前为所有文件建立索引。然后获取所有这些文件的大小并对其进行排序。前你甚至可以开始复制。
然后就不能保证你在复制过程之前计算的状态完全相同期间复制过程因此变得毫无意义。