移动一系列编号的文件?

移动一系列编号的文件?

我有 291 个编号文件(从 001 - 标题开始到 291 - 标题结束),需要移动到单独的目录中。(001 到 021 到文件夹 1,022 到 053 到文件夹 2,每次的文件数量不一定相同)。

我认为我可以用一种令人讨厌的方式来做这件事,像这样:ls | head -n 21 | sed -r 's|(.*)|mv \1 /path/to/folder1|' | sh

我几乎确信有更好的方法,那么它会是什么呢?

编辑:这样就可以了,但是我记得……

我不需要使用终端,所以我使用文件管理器来单击并拖动。但问题仍然存在。

答案1

由于您说并不总是正好有 21 个文件,因此您需要手动移动文件,并且为了有效地做到这一点,您可以使用括号扩展

mv filename{001..21} dir1
mv filename{022..53} dir2
...

答案2

这将按照您描述的方式移动文件(除了第二个范围对于后 21 个文件来说是 022 到 042)。

for ((i = 1; i <= 291; i++))
do
    ((d = (i - 1) / 21 + 1))
    printf -v file 'filename%03d' "$i"
    printf -v dir  'dirname%02d'  "$d"
    [[ -d "$d" ]] && mkdir "$d"
    mv "$f" "$d"
done

答案3

我的意思是移动大量文件(比如数万个或一百万个),如果仅使用 {1..20},shell 会抱怨文件列表太长,所以

,您可以加载动量内置:

setopt extended_glob zmodload

zsh/文件

完成后,您可以使用以下命令:

mv ./somefolder/{1..100000}.txt  pathto/yourfolder/

或者如果你正在编写一些 shell 脚本,你可以执行以下操作:

for i in `seq $start $end`;  
    do  mv "prefix${i}suffix.txt" pathto/yourfolder/  
done

如果你不使用 zsh,你可以参考https://unix.stackexchange.com/questions/128559/solving-mv-argument-list-too-long

相关内容