我有一个包含无数文件的目录。当我尝试复制此目录时,我收到一条消息,指出无法复制文件(已损坏?)并且复制停止。
我可以在终端上输入任何命令来检查该目录树上的所有文件并列出所有无法复制或损坏的文件吗?我现在不想复制文件,只是为了检查如果我尝试的话文件是否无法复制/读取。
我使用的是 OS X Mountain Lion,但我希望任何 UNIX 命令都可以正常工作。
谢谢。
注意:损坏是指无法读取或复制的文件。
答案1
rsync
可用于复制目录,并且如果任何错误导致终止,则能够从终止点重新启动复制rsync
。使用 rsync 的
--dry-run
选项,您可以查看将复制的内容,而无需实际复制任何内容。--stats
和选项--progress
也很有用。 and--human-readable
or-h
更容易阅读。例如
rsync --dry-run -avh --stats --progress /path/to/src/ /path/to/destination/
我不确定 Mac OS X 上是否默认安装了 rsync,但我在 Mac 上使用过它,所以我知道它肯定可用。
要快速检查子目录中的文件是否可以读取,您可以使用
grep -r XXX /path/to/directory/ > /dev/null
.搜索正则表达式并不重要,因为输出无论如何都会被丢弃。STDOUT 被重定向到 /dev/null,因此您只会看到错误。
我选择这里的唯一原因
grep
是因为它的-r
递归选项。除了这里之外,还有许多其他命令可以使用grep
,如果与find
.
答案2
我编写了一个使用grep
.
如果grep
macOS 不支持-a
和-r
选项,只需安装grep
GNU自制:
brew install grep
我的findCorruptedFilesIn
职能:
findCorruptedFilesIn () {
local grep=$(which ggrep 2>/dev/null || which grep)
time $grep -a -r . "$@" > /dev/null
}
你可以这样使用它:
$ findCorruptedFilesIn Videos/
/bin/grep: Videos/CHRIST/Joel_Osteen/Daily_Wisdom_TV/Positioning_Yourself_to_Prosper_TD_Jakes__18__sICQGp3iIfc__youtube_com.mp4: Input/output error
real 17m25.045s
user 0m0.654s
sys 1m46.749s