如何移动第一个 x 文件

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)

  • (假设没有一个文件名包含空格、制表符、换行符、星号、左方括号、问号字符或以 `-` 或 `.` 开头,并且假设 `subfolder1` 本身没有出现在该列表中。) (16认同)
  • ``$ sudo mv `ls | head -50000` 01/ sudo: 无法执行 /bin/mv: 参数列表太长``` (2认同)

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)

  • POSIX 片段是一个瑰宝 (2认同)

Lui*_*ano 9

一个简单且支持特殊字符、空格等的版本。

ls -Q dir1 | head -1000 | xargs -i mv dir1/{} dir2/
Run Code Online (Sandbox Code Playgroud)

对于这个工作的,是dir2必须存在,你必须从父目录执行它dir1dir2

这会将 1000 个文件从 dir1 移动到 dir2。

  • 请注意,“ls -Q”不会生成与“xargs”的预期输入格式兼容的输出。它对包含空格字符的文件名有帮助,​​但对双引号或反斜杠没有帮助,并且对包含控制字符(包括 TAB)的文件名有害。 (2认同)

小智 5

  1. 转到要从中移动文件的目录
  2. 在命令下运行

    find . -name 'Hello*.gz' | head -n 5000 | xargs -I {} mv {} /data01/path/ 
    
    Run Code Online (Sandbox Code Playgroud)

find命令,.(点)表示当前目录

查找以 Hello 开头并以 gz 结尾的文件,前 5000 个文件将移动到路径 /data01/path/