此脚本将按日期对文件进行排序,然后将前 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/