基本上我需要运行一个Unix脚本来查找目录/ fss / fin中的所有文件夹(如果存在);然后我把它tar并移动到另一个目录/ fs / fi。
到目前为止,这是我的命令:
find /fss/fin -type d -name "essbase" -print
这里我直接提到了文件夹名essbase
。但相反,我想查找/fss/fin
中的所有文件夹并全部使用它们。
如何找到/fss/fin
目录中的所有文件夹& tar他们将他们移动到/fs/fi
?
澄清1:
是的我只需要使用Unix shell脚本找到目录
/fss/fin
目录中的所有文件夹,并将它们转到另一个目录/fs/fi
。
澄清2:
我想说清楚要求。 Shell脚本应包含:
- 查找目录
中的所有文件夹/fss/fin
- 抓住文件夹
- 将文件夹移动到位于服务器
上的另一个目录/fs/fi
s11003232sz.net
中- 根据用户请求,它应解压缩文件夹并将其移回原始目录
醇>/fss/fin
答案 0 :(得分:5)
这是我正在使用的一个示例,它可能会引导您找到正确的方向
BackUpDIR="/srv/backup/"
SrvDir="/srv/www/"
DateStamp=$(date +"%Y%m%d");
for Dir in $(find $SrvDir* -maxdepth 0 -type d );
do
FolderName=$(basename $Dir);
tar zcf "$BackUpDIR$DateStamp.$FolderName.tar.gz" -P $Dir
done
答案 1 :(得分:2)
由于tar
自动执行目录,因此您实际上不需要做很多事情。假设GNU tar:
tar -C /fss/fin -cf - essbase |
tar -C /fs/fi -xf -
“-C
”选项在操作前更改目录。第一个tar
写入标准输出(单独的' - ')在essbase
目录中找到的所有内容。 tar
的输出通过管道传输到第二个tar
,后者读取其标准输入(单独的' - ';有趣的不是它!)。
假设GNU找到,你也可以这样做:
(cd /fss/fin; tar -cf - $(find . -maxdepth 1 -type d | sed '/^\.$/d')) |
tar -xf - -C /fs/fi
这会将目录更改为源目录;它运行'find',最大深度为1,以查找目录,并使用'sed'从列表中删除当前目录;第一个'tar'然后将输出写入第二个,这与之前相同(除了我切换参数的顺序以强调两个调用之间的并行性)。
如果您的顶级目录(实际位于/ fss / fin中的目录)在名称中有空格,那么还有更多工作要做 - 我假设没有要备份的目录以'开头。 “:
(cd /fss/fin; find * -maxdepth 0 -type d -print 0 | xargs -0 tar -cf -) |
tar -xf - -C /fs/fi
这会从'*'生成的列表中清除非目录,并用NUL'\ 0'(零字节)写入它们,标记每个名称的结尾(而不是换行符)。输出被写入'xargs',它被配置为期望以NUL终止的名称,并且它使用正确的目录名运行'tar'。这个集合的输出像以前一样被发送到第二个tar。
如果您的目录名称以“。”开头收集,然后在'*'之后添加'.[a-z]*
'或其他合适的模式;至关重要的是你使用的不列出'。'要么 '..'。如果您在目录中有以破折号开头的名称,则需要使用“./*
”和“./.[a-z]*
”。
如果您有更多不正当的要求,请在问题修正案中明确说明。
答案 2 :(得分:0)
find /fss/fin -d 1 -type d -name "*" -print
上面的命令为您提供/ fss / fin的第1级子目录列表。 然后你可以做任何事情。例如。将它们tar到您的输出目录,如下面的命令
tar -czf /fss/fi/outfile.tar.gz `find /fss/fin -d 1 -type d -name "*" -print`
原始目录结构将在解除后重新创建。
答案 3 :(得分:0)
以下是一个bash示例(使用您的路径更改/fss/fin
,/fs/fi
):
dirs=($(find /fss/fin -type d))
for dir in "${dirs[@]}"; do
tar zcf "$dir.tgz" "$dir" -P -C /fs/fi && mv -v "$dir" /fs/fi/
done
找到所有文件夹,单独tar它们,如果成功 - 将它们移动到不同的文件夹中。
答案 4 :(得分:-1)
这应该这样做:
#!/bin/sh
list=`find . -type d`
for i in $list
do
if [ ! "$i" == "." ]; then
tar -czf ${i}.tar.gz ${i}
fi
done
mv *.tar.gz ~/tardir