Fab*_*out 31 command-line shell shell-script wildcards
我有一个包含数千个无序文件的巨大文件夹。通过mv
命令将前 5000 个移动到子文件夹是否可行?现在我移动文件
mv *some_pattern* ./subfolder1/
Run Code Online (Sandbox Code Playgroud)
至于现在,我非常随机地移动图像,如果每个子文件夹中没有正好 5000 个文件,这并不重要。有没有更好的方法来做到这一点?
sch*_*iba 47
mv `ls | head -500` ./subfolder1/
Run Code Online (Sandbox Code Playgroud)
Sté*_*las 16
与zsh
:
mv -- *(D.oN[1,5000]) ./subfolder1
Run Code Online (Sandbox Code Playgroud)
按目录中的顺序移动最多 5000 个常规文件。
对于按字典顺序排序的列表中的前 5000 个:
mv -- *(D.[1,5000]) ./subfolder1
Run Code Online (Sandbox Code Playgroud)
如果您收到关于arg list too long的错误。您可以通过发出以下命令来使用zsh
'buitinmv
命令:
zmodload zsh/files
Run Code Online (Sandbox Code Playgroud)
第一的。
POSIXly:
set --
for f in .* *; do
[ "$#" -lt 5000 ] || break
[ -f "$f" ] || continue
[ -L "$f" ] && continue
set -- "$@" "$f"
done
mv -- "$@" subfolder1/
Run Code Online (Sandbox Code Playgroud)
一个简单且支持特殊字符、空格等的版本。
ls -Q dir1 | head -1000 | xargs -i mv dir1/{} dir2/
Run Code Online (Sandbox Code Playgroud)
对于这个工作的,是dir2
必须存在,你必须从父目录执行它dir1
和dir2
。
这会将 1000 个文件从 dir1 移动到 dir2。
小智 5
在命令下运行
find . -name 'Hello*.gz' | head -n 5000 | xargs -I {} mv {} /data01/path/
Run Code Online (Sandbox Code Playgroud)在find
命令,.
(点)表示当前目录
查找以 Hello 开头并以 gz 结尾的文件,前 5000 个文件将移动到路径 /data01/path/