如何从包含数千个文件的文件夹中移动 100 个文件?

如何从包含数千个文件的文件夹中移动 100 个文件?

我有一个包含数千个文件的目录。我怎样才能将 100 个文件(任何文件都可以)移动到另一个位置。

答案1

for file in $(ls -p | grep -v / | tail -100)
do
mv $file /other/location
done

假设文件名不包含空格、换行符(假设默认值为$IFS)、通配符(?*[)或以 开头-

答案2

在 zsh 中最简单:

mv -- *([1,100]) /other/location/

这将移动前 100 个非隐藏文件(任何类型,更改([1,100])(.[1,100])for常规的仅文件,或(^/[1,100])任何类型,但目录)按名称字典顺序排列。您可以使用以下命令选择不同的排序顺序o 全局限定符,例如移动 100 个最旧的文件:

mv -- *(Om[1,100]) /other/location/

对于其他 shell,您可以在循环中执行此操作并提前退出。

i=0
for x in *; do
  if [ "$i" = 100 ]; then break; fi
  mv -- "$x" /other/location/
  i=$((i+1))
done

另一种便携式方式是构建文件列表并删除除最后 100 个之外的所有文件

答案3

以下内容对我有用。抱歉,如果它之前发布过,但我没有在快速扫描中看到它。

ls path/to/dir/containing/files/* | head -100 | xargs -I{} cp {} /Path/to/new/dir

答案4

随机移动一百个:

shuf -n 100 -e * | xargs -i mv {} path-to-new-folder

https://stackoverflow.com/questions/14033129/how-to-move-a-given-number-of-random-files-on-unix-linux-os

假设所有文件名都不包含引号或反斜杠或以空格开头-。由于 的mvstdin 现在是一个管道,因此它可能发出的用于用户确认的提示将不起作用。更正确、可靠和高效的方法(使用支持 ksh 样式进程替换的 shell)将是:

xargs -r0a <(shuf -zn100 -e -- *) mv -t path-to-new-folder -- 

相关内容