gpt4 book ai didi

bash - 参数列表太长 - Unix

转载 作者:行者123 更新时间:2023-11-29 08:55:20 26 4
gpt4 key购买 nike

此脚本将按日期对文件进行排序,然后将前 2500 个文件移动到另一个目录。
当我运行以下脚本时,系统提示 Argument list too long msg。任何人都可以帮助我增强脚本?谢谢

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 使用正则表达式而不是 glob,因此模式看起来有点不同。)

关于bash - 参数列表太长 - Unix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6890632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com