ls | grep 'NC022.*nii'
显示所有包含NC022
和 的文件nii
。
但当我尝试使用
mv NC022.*nii NC022/
它抱怨说
mv: cannot stat 'NC022.*nii': No such file or directory
如果我尝试这样做,也会发生这种情况(如其他答案所示)。
mv -t NC022 'ls | grep 'NC022.*nii''
我很难找出错误所在,因为我感觉自己已经多次做过完全相同的事情,却没有任何错误……
如何将所有匹配某个模式的文件移动到一个文件夹中?
第一个命令的部分 ls 输出示例:
NC022_Background1_Raw import W325.39 L290.nii
NC022_Background2_Copy (2) of Raw import W325.39 L290.nii
NC022_Background3_Raw import W1103.50 L551.nii
NC022_Mask1_mask_air.nii
答案1
您将正则表达式语法(由 使用grep
)与 glob 模式(由 shell 使用)相混淆。
在正则表达式中,.
表示任意单个字符,*
表示零个或多个重复。因此,与之间的任何字符(包括空字符)grep 'NC022.*nii'
匹配。NC022
nii
相反,.
在 shell 通配符中, 是字面量,而*
本身表示零个或多个字符。因此,NC022.*nii
可以匹配NC022.
和nii
之间的任何字符(包括空字符)。
特别是,如果你尝试匹配所有文件.nii
扩大,.
位置不对:你应该使用NC022*.nii
ie
mv NC022*.nii NC022/
答案2
在我们的例子中,问题略有不同。路径中有一个空格,所以我们将整个路径放在引号中。然后mv: cannot stat xxxx': No such file or directory
出现相同的错误消息。解决方案是省略引号并屏蔽空格:
前:
mv "/code/API Server/Data/*.rdf" /server/data
解决方案:
mv /code/API\ Server/Data/*.rdf /server/data
也许这会对其他正在寻找此问题的人有所帮助。