加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 参数列表太长 – Unix

发布时间:2020-12-15 19:01:27 所属栏目:安全 来源:网络整理
导读:此脚本将按日期对文件进行排序,然后将前2500个文件移动到另一个目录. 当我在脚本下运行时,系统会提示输出参数列表太长时间.任何人都可以帮我增强脚本?谢谢 NUM_OF_FILES=2500FROM_DIRECTORY=/apps/data01/RAID/RC/MD/IN_MSC/ERC/inDESTINATION_DIRECTORY=/a
此脚本将按日期对文件进行排序,然后将前2500个文件移动到另一个目录.
当我在脚本下运行时,系统会提示输出参数列表太长时间.任何人都可以帮我增强脚本?谢谢
NUM_OF_FILES=2500
FROM_DIRECTORY=/apps/data01/RAID/RC/MD/IN_MSC/ERC/in
DESTINATION_DIRECTORY=/apps/data01/RAID/RC/MD/IN_MSC/ERC/in_load

if [ ! -d $DESTINATION_DIRECTORY ]  
        then  
                echo "unused_file directory does not exist!"  
        mkdir $DESTINATION_DIRECTORY   
        echo "$DESTINATION_DIRECTORY directory created!"  
else   
        echo "$DESTINATION_DIRECTORY exist!"    
fi  


echo "Moving $NUM_OF_FILES oldest files to $DESTINATION_DIRECTORY directory"  

ls -tr  $FROM_DIRECTORY/MSCERC*.Z|head -$NUM_OF_FILES |
    xargs -i sh -c "mv {} $DESTINATION_DIRECTORY"
你没有说,但我认为这是问题发生的地方:
ls -tr  $FROM_DIRECTORY/MSCERC*.Z|head -2500 | 
    xargs -i sh -c "mv {} $DESTINATION_DIRECTORY"

(您可以通过在脚本顶部添加“set -x”来验证它.)

问题是内核具有给予新进程的命令行总长度的固定最大大小,并且超过了ls命令中的大小.您可以通过不使用globbing而不是使用grep来解决它:

ls -tr  $FROM_DIRECTORY/ | grep '/MSCERC*.Z$' |head -2500 | 
    xargs -i sh -c "mv {} $DESTINATION_DIRECTORY"

(grep使用正则表达式而不是globs,因此模式看起来有点不同.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读