到目前为止我写的当前脚本:
#!/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
Tunning:
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"`
答案 0 :(得分:0)
我从未使用过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
的{{1}}选项也非常好,但是您需要更改-print0
子shell中的IFS
变量。你需要测试一下,希望它不会影响while
以外的任何其他命令。
你知道,我没有给你一个经过测试的解决方案,但我发现你有能力将上述内容变成工作代码。此致!
更新:忘了告诉你使用过的伪功能read
。它与您的机器上的平台相关。如果可以使用filesize
,stat
,wc
和其他人...请点击此处获取建议:
更新2 :我将while循环更新为兼容ksh(来自aix7)我避免使用filesize作为标准。您需要调整阈值变量,使其足够大,以避免大量输出文件和窗台适合您的可用空间。
答案 1 :(得分:0)
已经太长了,所以我打开另一个标签继续,
问题终于得出结论,我对构建简单有效的脚本要求太高了。没有100%,所以这是我的问题。
另外,我的框中的gzip似乎无法在飞行压缩中执行,它会累积内存中的更改,因此会使用compress。
现在的版本:
dump_acl2.sh
#!/bin/ksh
aclget $1 | uuencode -m $1.acl
dump_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.Z