使用 mv 命令后文件丢失

使用 mv 命令后文件丢失

我跑了

/$ sudo mv -f -i FileSystem/* 

使用该命令后,我的所有文件都丢失了。我的文件去哪儿了?

答案1

此命令缺少目标:

sudo mv -f -i FileSystem/* 

由于扩展,* mv将使用它找到的最后一个目录来将其移动到其中(或文件只有 2 个)。例如:

touch 1 2 3 4 5 6 7 8
$ mv *
mv: target '8' is not a directory

8由于不是目录,因此会出错。命令中的最后一个可能是一个目录,因此它会将所有文件移动到该目录中。或者,如果mv由 2 个文件组成,它会将一个文件移到另一个文件上。

那么

ls FileSystem

并且其中应该仍有一个项目,即包含您的结果的目录mv。请注意,由于-f(强制),如果是 2 个文件,您删除了一个,并且无法恢复它。您需要恢复备份。

最后一个例子:

$ ls
1  2
$ mv *
$ ls
2

仅当有两个文件时才会发生这种情况。

1 错误出局

ls
1
$ mv *
mv: missing destination file operand after '1'
Try 'mv --help' for more information.

3 及以上也会出错(与上面的 8 个文件示例一样)除非最后一个是现有目录:

$ touch 1 2 3 4 5 6
$ mkdir 7
$ mv *
$ ls
7
$ ls 7
1  2  3  4  5  6

答案2

全局文件夹 ( ) 中的文件FileSystem将被 shell 视为命令的参数列表mv,因此列表中的最后一个文件/文件夹将被读取为目标。

  • 如果您只有两个文件,则mv在提示覆盖权限后,将第二个文件替换为第一个文件。
  • 如果返回列表中的最后一项是文件夹,mv命令将移动该文件夹内的所有其他内容。

丢失的文件很可能位于FileSystem/*运行该命令时生成的最后一个文件夹中。

考虑以下包含两个文件的测试文件夹,其中运行您列出的命令将尝试用第二个文件覆盖第一个文件(我-v为了说明目的添加了它):

~$ ls testdir
test1.txt  test2.txt

sudo mv -f -i -v testdir/*
mv: overwrite 'testdir/test2.txt'? y
renamed 'testdir/test1.txt' -> 'testdir/test2.txt'

在另一种情况下,如果文件夹是文件列表中的最后一个文件夹,它会将所有内容移动到test_folder(因为它是最后返回的项目并被命令视为目标mv),如下所示:

$ ls testdir/
empty_folder1  test1.txt  test2.txt  test_folder

您的所有文件都将移动到列表中的最后一项(test_folder在此示例中)

$ sudo mv -f -i -v testdir/*
renamed 'testdir/empty_folder1' -> 'testdir/test_folder/empty_folder1'
renamed 'testdir/test1.txt' -> 'testdir/test_folder/test1.txt'
renamed 'testdir/test2.txt' -> 'testdir/test_folder/test2.txt'

相关内容