我跑了
/$ 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'