user207200 Asked:2020-04-28 16:11:46 +0000 UTC2020-04-28 16:11:46 +0000 UTC 2020-04-28 16:11:46 +0000 UTC 从目录中选择 N 个随机文件 772 您需要从N随机选择的文件目录中复制。 到目前为止,我已经这样做了: ls -d /anydir/* | shuf | head -30 | xargs cp -t /tmp/othdir 这可以通过缩短管道来简化吗? linux 2 个回答 Voted Best Answer aleksandr barakin 2020-04-28T18:42:34Z2020-04-28T18:42:34Z 警告:假设,首先,文件名中没有特殊字符,例如空格,其次,目录中文件列表的长度(以字节为单位)不超过参数列表的最大长度,例如,可以使用以下命令找到: $ getconf ARG_MAX shuf程序有一个选项-e,因此程序将其他参数视为输入列表的元素(被打乱: $ shuf -e 1 2 3 1 3 2 即,您可以删除一个“管道”并调用一个程序(ls) 并且这个程序还有一个选项-n可以让你在不调用head程序(和另一个“管道”)的情况下做 在这种特殊情况下,您无需调用xargs程序(并删除另一个“管道”),只需将结果参数列表直接传递给cp程序: $ cp $(...) куда-копировать 总共是这样的: $ cp $(shuf -n 30 -e каталог/*) куда Fat-Zer 2020-04-28T18:47:41Z2020-04-28T18:47:41Z 男人舒夫 -n, --head-count=COUNT output at most COUNT lines ls /anydir/ | shuf -n 30 | xargs cp -t /tmp/othdir
警告:假设,首先,文件名中没有特殊字符,例如空格,其次,目录中文件列表的长度(以字节为单位)不超过参数列表的最大长度,例如,可以使用以下命令找到:
shuf程序有一个选项
-e,因此程序将其他参数视为输入列表的元素(被打乱:即,您可以删除一个“管道”并调用一个程序(ls)
-n可以让你在不调用head程序(和另一个“管道”)的情况下做在这种特殊情况下,您无需调用xargs程序(并删除另一个“管道”),只需将结果参数列表直接传递给cp程序:
总共是这样的: