我有一个包含数千个文件的目录。我怎样才能将 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
假设所有文件名都不包含引号或反斜杠或以空格开头-
。由于 的mv
stdin 现在是一个管道,因此它可能发出的用于用户确认的提示将不起作用。更正确、可靠和高效的方法(使用支持 ksh 样式进程替换的 shell)将是:
xargs -r0a <(shuf -zn100 -e -- *) mv -t path-to-new-folder --