the*_*fog 60 administration data-recovery files mv
我有(好吧,我有)一个目录:
/media/admin/my_data
Run Code Online (Sandbox Code Playgroud)
它的大小约为 49GB,其中包含数万个文件。该目录是活动 LUKS 分区的挂载点。
我想将目录重命名为:
/media/admin/my_data_on_60GB_partition
Run Code Online (Sandbox Code Playgroud)
我当时没有意识到,但我从主目录发出了命令,所以我最终做了:
~% sudo mv /media/admin/my_data my_data_on_60GB_partition
Run Code Online (Sandbox Code Playgroud)
然后mv
程序开始移动,/media/admin/my_data
并将其内容移动到一个新目录~/my_data_on_60GB_partition
。
我使用Ctrl+C来取消命令,所以现在我有一大堆跨目录的文件:
~/my_data_on_60GB_partition <--- about 2GB worth files in here
Run Code Online (Sandbox Code Playgroud)
和
/media/admin/my_data <---- about 47GB of orig files in here
Run Code Online (Sandbox Code Playgroud)
新目录~/my_data_on_60GB_partition
及其一些子目录归 root 所有。
我假设mv
程序最初必须以 root 身份复制文件,然后在传输后将chown
它们复制回我的用户帐户。
我有一个目录/分区的旧备份。
我的问题是,是否有可能可靠地恢复移动的一堆文件?
也就是说,我可以运行:
sudo mv ~/my_data_on_60GB_partition/* /media/admin/my_data
Run Code Online (Sandbox Code Playgroud)
或者我应该放弃尝试恢复,因为文件可能已损坏和部分完整等?
/media/admin/my_data
Run Code Online (Sandbox Code Playgroud)
Ste*_*itt 89
在文件系统之间移动文件时,mv
在完成复制之前不会删除文件,而是按顺序处理文件(我最初说它会依次复制然后删除每个文件,但这并不能保证——至少 GNUmv
副本然后删除每个命令-行参数依次,POSIX 指定此行为)。所以你在目标目录中最多应该有一个不完整的文件,而原始文件仍然在源目录中。
要将内容移回,请添加-i
标志,以免mv
覆盖任何内容:
sudo mv -i ~/my_data_on_60GB_partition/* /media/admin/my_data/
Run Code Online (Sandbox Code Playgroud)
(假设您没有要从中恢复的任何隐藏文件~/my_data_on_60GB_partition/
),或者更好(假设您发现,您可能有许多文件等待删除),添加-n
标志以便mv
不会覆盖任何内容但不会问你一下:
sudo mv -n ~/my_data_on_60GB_partition/* /media/admin/my_data/
Run Code Online (Sandbox Code Playgroud)
您还可以添加-v
标志以查看正在执行的操作。
对于任何符合 POSIX 的mv
,原始目录结构应该仍然完好无损,因此您可以检查一下——然后简单地删除/media/admin/my_data
......(但在一般情况下,我认为该mv -n
变体是安全的方法——它处理所有形式的mv
,包括例如 mv /media/admin/my_data/* my_data_on_60GB_partition/
。)
您可能需要恢复一些权限;你可以这样做集体使用chown
和chmod
,或使用备份恢复它们getfacl
和setfacl
(感谢佐藤桂的提醒)。
the*_*fog 20
在得到 Stephen Kitt 的回答并将此命令作为潜在解决方案进行讨论后:
sudo mv -i ~/my_data_on_60GB_partition/* /media/admin/my_data/
Run Code Online (Sandbox Code Playgroud)
我决定推迟运行它,直到我弄清楚发生了什么,这个答案描述了我发现并最终做的事情。
我正在使用 Gnumv
将文件复制到目标,然后只有在复制操作成功时,它才会删除原始文件。
但是我想确认是否mv
一次一个文件执行这个序列,如果是这样,原始文件夹内容将被干净地分成两部分,一部分转移到目的地,另一部分仍然留在源头。并且可能会有一个文件在复制期间被中断,这在两个目录之间很常见 - 它可能会格式错误。
为了发现两个目录之间通用的文件,我运行了:
~% sudo diff -r --report-identical-files my_data_on_60GB_partition/. /media/admin/mydata/. | grep identical | wc -l
14237
Run Code Online (Sandbox Code Playgroud)
这个结果表明在源目录和目标目录中有 14,237 个相同文件的实例,我通过手动检查文件来确认 - 是的,两个目录中有许多相同的文件。这表明只有在mv
复制大量文件后,它才会执行源文件的删除。info
在mv
命令中的快速查找显示
它 [
mv
] 首先使用一些相同的代码cp -a
来复制请求的目录和文件,然后(假设复制成功)删除原始文件。如果复制失败,则删除复制到目标分区的部分。
我没有运行命令,但我怀疑我是否尝试运行
sudo mv -i ~/my_data_on_60GB_partition/* /media/admin/my_data/
Run Code Online (Sandbox Code Playgroud)
-i
覆盖之前的提示可能会触发超过 14,000 次。
然后找出新创建的目录中的总文件数:
~% sudo find my_data_on_60GB_partition/ -type f -a -print | wc -l
14238
Run Code Online (Sandbox Code Playgroud)
因此,如果新目录中共有 14238 个常规文件,而 14237 个在源中具有相同的原始文件,则意味着新目录中只有一个文件在源中没有对应的相同文件。为了找出那个文件是什么,我朝着源的方向运行了 rsync:
~% sudo rsync -av --dry-run my_data_on_60GB_partition/ /media/admin/my_data
sending incremental file list
./
Education_learning_reference/
Education_learning_reference/Business_Education/
Education_learning_reference/Business_Education/Business_education_media_files/
Education_learning_reference/Business_Education/Business_education_media_files/Jeff Hoffman - videos/
Education_learning_reference/Business_Education/Business_education_media_files/Jeff Hoffman - videos/Jeff and David F interview/
Education_learning_reference/Business_Education/Business_education_media_files/Jeff Hoffman - videos/Jeff and David F interview/018 business plans-identifying main KPIs.flv
sent 494,548 bytes received 1,881 bytes 330,952.67 bytes/sec
total size is 1,900,548,824 speedup is 3,828.44 (DRY RUN)
Run Code Online (Sandbox Code Playgroud)
快速检查确认这是格式错误的文件,该文件同时存在于源文件和目标文件中,目标文件 = 64MB,原始文件 = 100MB。此文件及其目录层次结构仍由 root 拥有,并且尚未恢复原始权限。
所以总结一下:
mv
从未到达的文件 仍回到其原始位置(显然)mv
完全复制的文件仍然在源目录中保留其原始副本换句话说,所有原始文件仍然完好无损,这种情况下的解决方案是简单地删除新目录!
归档时间: |
|
查看次数: |
7786 次 |
最近记录: |