mv 文件 订购 mv 文件

mv 文件 订购 mv 文件

如何选择处理文件的顺序mv? (我的意思是,我可以手动调用它,但是保留路径和递归工作的工作很快就会成为问题)

我有一个 fs 安装在 /mnt 上,另一个安装在 /home 上

/mnt 有各种文件,在很多文件夹中

我想全部移动到/home

但我想选择移动它们的顺序

例如,我希望在 /mnt/b/d/g/e/file 之前处理 /mnt/a/t/d/v/file

如果有任何可用的排序,我可以使用它(我认为)

答案1

当你这样做时:

mv /mnt/* /home/

它是 shell 扩展/mnt/*到匹配文件列表(对于该模式,这将是 中的所有非隐藏文件/mnt)并将结果传递给mv,因此mv将接收mv, /mnt/a, /mnt/b, /mnt/c.../home/作为单独的参数。

默认情况下,Shell 按词法对它们的全局扩展进行排序。在 zsh shell 中,可以使用o/ Oglob 限定符更改顺序。

/mnt/a会被移到前面,/mnt/b因为按词法a排序在前面b。如果你想以相反的顺序移动它们,你可以这样做:

mv /mnt/*(DOn) /home/

在 zsh 中(还添加D限定符来移动隐藏文件)。

如果您想/mnt/b先移动,您可以这样做:

set -o extendedglob
mv /mnt/b /mnt/^b(D) /home/

或者:

mv /mnt/b /home/ && mv /mnt/*(D) /home/

通常,mv只做一些rename()ing,所以它不会递归地工作。但是,当跨文件系统移动时,它无法做到这一点,因此它采取递归复制,然后删除原始文件的方式。

In 中mv /mnt/* /home/,where/mnt/homeare 在两个不同的文件系统上,/mnt/a将被移到 之前,但是当涉及或/mnt/b中的文件时,顺序是未指定的,您通常无法控制它。/mnt/a/mnt/b

要对这些顺序有发言权,您必须手动移动单个文件,或者您可以诉诸cpio -ppax -rw可以被告知按给定顺序复制文件(然后手动删除源)。

相关内容