答案1
在这里 Shell glob 将成为你的朋友。
例如,grep
您可以使用列出名称包含QM
并以结尾的所有文件,而不是.h5
使用
ls *QM*.h5
mv
您可以在和cp
操作中使用 globs前提是匹配文件的数量不是太多
cp *QM*.h5 path/to/new_dir/
如果文件数量太大,您可能会收到错误argument list too long
;您可以使用 shell 的printf
内置命令xargs
将副本分成可管理的块来解决这个问题:
printf '%s\0' *QM*.h5 | xargs -0 cp -t path/to/new_dir/
使用 bash,没有内在的方法来限制所选文件的数量(或选择随机子集),但你可以通过添加以下调用来实现shuf
:
printf '%s\0' *QM*.h5 | shuf -zn5 | xargs -0 cp -t path/to/new_dir/
请注意,我使用空字节\0
而不是换行符来分隔文件名列表 - 在您的情况下这不是必需的,但使得该命令在文件名本身可能包含换行符的更一般情况下可用。
如果你不介意切换到 z shell zsh
,那么你可以选择一个随机子集,而不必借助外部实用程序,使用 shell 更具表现力的glob 限定符:
cp -t path/to/new_dir/ *QM*.h5(Nnoe['REPLY=$RANDOM'][1,5]) # zsh only
我们的 Unix 和 Linux 姊妹网站上的相关问题:
答案2
“很多文件”?“文件名称中包含奇怪字符”?
这就要求find
和xargs
!
阅读man find;man xargs
并执行如下操作:
find . -maxdepth 1 -name '*QM*.h5' -print0 |\
xargs -0 --no-run-if-empty mv --target-directory=AnotherDirectory
注意:“ AnotherDirectory
”必须已经存在。
mv
注意:首先将“ ”替换为“ ” ,看看结果会是什么echo mv
。
答案3
就cp *QM*.h5 target_dir
这么完成了。