由于我犯了一个愚蠢的错误,我失去了一部分音频收藏。:-(很
高兴我有一个最近的备份,但是它仍然很烦人。除了您的确如此,另一个作弊的罪魁祸首是mv
,它将显示如下:
音频文件有一个特定的方案:
ARTIST - Some Title YY.mp3
YY
2位数字的年份规范在哪里。
mkdir 90<invisible control character>
(到现在为止,我还不知道我实际上键入了三分之一的多余字符,这是不可见的……!)
我不想将所有1990年代的音乐都放在一个目录中,而不是全部放在一个目录中。所以我输入:
find . -name '* 9?.mp3' -exec mv {} 90 \;
不难理解发生了什么事吗?:->
(灾难性的)结果是一个名为'90 something ' 的原始空目录(其中某些东西是“不可见的”控制字符)和一个名为'90'的单个文件,被覆盖了n次。
所有文件都消失了。:-(((显然)
希望mv
能够及时检查目标“文件”的签名(请记住* NIX:Everything Is A File)是否以d------
(例如drwxr-xr-x
)开头。当然,目的地是否存在。当您只是简单地忘记首先mkdir
进入目录时,上述情形就有一个变体。(但是,当然,您认为它在那里...)
甚至从首字母W开始的我们讨厌的OS都这样做。如果需要,甚至会提示您指定目标的类型(文件?目录?)。
因此,我想知道我们* NIXers是否仍必须为自己编写“ mv
脚本”,以避免这些最不希望的意外。
mv
从技术上讲,这不是问题所在,它不知道您要移动一系列文件。mv
每个文件运行一次。就是这样find -exec ;
。如果您曾经使用过find -exec +
(如某些评论中所述),则只要有一个以上的论点mv
便会大喊。
mv
为每个文件运行似乎没有多考虑,但是(如我之前所说)它将是唯一的明智的解决方案,只要源文件分散在各个子目录中即可。在我的测试用例中,源文件全部放在一个目录中并不意味着这是我的实际测试用例。实际上,这只是一个简化,因为稍后我可能会很容易地对其进行详细说明。另外,由于其长度减少,因此阅读问题的时间更少。:)
mv
要求目的地存在?mv oldfile newfile
是重命名文件的方法,期望newfile
已经存在并成为目录是很愚蠢的。
.mp3
名称为的目录90
,它可能是您没有备份的目录。