我將所有資料移動到另一個資料夾並犯了 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>