我使用了移動命令,所有檔案都消失了

我使用了移動命令,所有檔案都消失了

我將所有資料移動到另一個資料夾並犯了 1 個錯誤並運行此命令

mv * /*

現在所有文件都消失了。我怎樣才能找到他們?還是它們被刪除了?

答案1

所有通配符都由*shell 擴展並傳遞給命令。這意味著第一個星號被替換為當前工作目錄中的文件,第二個星號被替換為 / 中的所有文件。你可以透過運行看到這一點

echo /*

在我的系統上,這會導致

/bin /boot /dev /etc /home /lib /lib64 /lost+found /media
/misc /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var

所以,你的命令最終是這樣的:

mv file1 file2 ... ... ... /tmp /usr /var

這將所有內容移動到/var.當然,最後的具體內容可能會因您的系統而異。無論是什麼,您都可能會在那裡找到您的文件。

我假設您以 root 身份運行。如果不這樣做,您將無法在 / 中寫入大部分目錄,因此什麼也不會發生。以 root 身分執行時要格外小心,並儘可能避免這樣做。

答案2

我從中得到了一個很好的觀察:

mkdir test; cd test; mkdir t1 t2 t3
cd ~/
mkdir testmove;
cd testmove;
touch abcd
mv * ~/test/*

這是有趣的部分,檔案「abcd」與目錄 t1 和 t2 一起移動到目錄 t3,即:

ls test
-> t3
cd t3
ls 
t1 t2 abcd

我的理解是,當我們編寫 * 時,命令實際上會擴展然後被執行,因此 mv 命令會擴展為

mv abcd ~/test/t1 ~/test/t2 ~/test/t3

因此它以 t3 作為目的地並將 abcd,t1,t2 移至 t3

因此,要回答您的問題,它將位於 / 的最後一個目錄中

mv從如果你有符號連結的手冊頁

Avoid specifying a source name with a trailing slash,
when it might be a symlink to a directory.  Otherwise, `mv' may do
something very surprising, since its behavior depends on the underlying
rename system call.  On a system with a modern Linux-based kernel, it
fails with `errno=ENOTDIR'.  However, on other systems (at least
FreeBSD 6.1 and Solaris 10) it silently renames not the symlink but
rather the directory referenced by the symlink.  *Note Trailing
slashes::.

您可以使用以下方式搜尋您的文件find / -type f -name <filename>

相關內容