到目前为止,我编写的脚本如下:
#!/bin/ksh
rm -fR /tmp/aclget
cd /
find ./ -type d \
| grep -v "^./tmp/" \
| xargs -I {} mkdir -p "/tmp/aclget/{}"
find ./ \
| grep -v "^./tmp/" \
| xargs -I {} aclget -o "/tmp/aclget/{}.acl" "{}"
cd /tmp
tar -cvf acl.tar aclget
gzip acl.tar在另一台计算机上复制权限
#!/bin/ksh
cd /tmp
gunzip acl.tar
tar -xvf acl.tar
cd /tmp/aclget
find ./ -exec aclput -i {} `echo "{}" | sed "s/^\.//g"`我遇到的问题是,在构建列表时,tmp总是没有空间。是否有可能制造管道,使其能够在飞行中工作?
在阅读反馈并尝试使用uuencode的概念后更新代码,经过一些测试后进行更改。(xargs中的255字节限制可能需要内核调优)
检查:
odmget -q "attribute=ncargs" PdAt
lsattr -El sys0 | grep ncargs调谐:
chdev -l sys0 -a ncargs=1024剧本:
#!/bin/ksh
cd /
find ./ -name "^./tmp/" -o \
-exec sh "aclget '{}' | uuencode - '/tmp/acl/{}.acl'" \; \
| gzip acl.uu.gz有人想到相反的部分了吗?我到目前为止,需要削减文件,因为uudecode只能解码第一个文件。
#!/bin/ksh
gunzip acl.uu.gz | uudecode
cd /tmp
find ./ -exec aclput -i {} `echo "{}" | sed "s/^\.//g"`发布于 2013-11-16 13:00:22
我从未使用过aclget,但以下是一些您可以使用的通用方法。
首先,您可以按目录对块目录进行处理,希望没有单个块太大。此外,您还可以优化tar类:
tar -vc aclget | gzip -9 > myfile1.tar.gz如果需要,btw、bzip和xz有更好的压缩比。
另一种办法可以取代:
xargs -I {} aclget -o "/tmp/aclget/{}.acl" "{}"有一个while循环,如:
(
batch_idx=0
iterations=1
threshold=$(( 100 * 1024 * 1024 ))
while read -r FILE; do
aclget -o "/tmp/aclget/$FILE.acl" "$FILE"
tar uv -C /tmp/aclget -f acl.tar $FILE.acl
rm "/tmp/aclget/$FILE.acl"
if (( iterations%threshold == 0 )); then
mv acl.tar acl_$batch_idx.tar
gzip acl_$batch_idx.tar
(( batch_idx+=1 ))
iterations=0
fi
(( iterations+=1 ))
done
mv acl.tar acl_$batch_idx.tar
gzip acl_$batch_idx.tar
)使用find的-print0选项也很好,但是您需要在while子shell中更改IFS变量,但是您需要测试它,希望它不会影响除了read之外的其他任何命令。
您知道,我没有给您一个经过测试的解决方案,但我看到您非常有能力将上面的代码转换为工作代码。致以问候!
更新:忘记告诉您使用的伪函数filesize。它非常依赖于你的机器上的平台。如果可以使用stat,wc,du等。见这里的建议:
更新2:我更新了well循环,使其与ksh (来自aix7)兼容,并且避免使用文件大小作为标准。您将需要调整阈值变量,以便它足够大,以避免大量的输出文件,并将适合您的自由空间。
发布于 2013-11-20 13:22:41
太久了,所以我打开另一个标签继续,
这些问题最终得出的结论是,我在构建简单高效的脚本方面要求太高。没有百分之百,所以这是我的问题。
而且,我的盒子里的gzip似乎无法执行动态压缩,它会在内存中积累变化,所以使用压缩。
现在的版本:
dump_acl2.sh
#!/bin/ksh
aclget $1 | uuencode -m $1.acldump_acl.sh
#!/bin/ksh
cd /
find ./ \
-type nfs \
-o -name "^./tmp/" \
-o -exec \tmp\dump_acl2.sh {} \; \
| compress -c \
> \tmp\dump_acl.`hostname -s`.uu.Zhttps://stackoverflow.com/questions/20018085
复制相似问题