我知道写这些脚本真的不是我的强项。 我需要一个shell脚本,它递归地将其文件夹中的每个文件打包成.bz2格式,因为我有很多文件,当我手动执行此操作时需要几个小时。
例如,这里有很多文件(这个例子更多):
/home/user/data/file1.yyy
/home/user/data/file2.xxx
/home/user/data/file3.zzz
/home/user/data/file4.txt
/home/user/data/file5.deb
/home/user/data/moredata/file1.xyz
/home/user/data/muchmoredata/file1.xyx
我需要将它们全部组合成.bz2,就像这样:
/home/user/data/file1.yyy.bz2
/home/user/data/file2.xxx.bz2
/home/user/data/file3.zzz.bz2
/home/user/data/file4.txt.bz2
/home/user/data/file5.deb.bz2
/home/user/data/moredata/file1.xyz.bz2
/home/user/data/muchmoredata/file1.xyx.bz2
当脚本结束时,另一件事情会很棒chown -R example:example /home/user/data
我希望你能帮助我
答案 0 :(得分:1)
bzip2
将在命令行上接受多个文件作为参数。要解决你的具体例子,我会做
cd /home/user/
find . -type f | egrep -v '\.bz2' | xargs bzip2 -9 &
这将找到/home/user
下的所有文件,从处理中排除任何已存在的.bz2
文件,然后通过xargs
将剩余列表发送到bzip2
。 -9
为您提供最大压缩(但需要更多时间)。使用xargs
提供命令时可以处理的文件名的数量或长度没有限制(在本例中为bzip2
)。
&
char表示"在后台运行所有这些"。这意味着命令提示符将立即返回给您,并继续其他工作,但不要期望所有文件被压缩一段时间。在某些时候,您还会收到诸如“作业%1 ...已开始”等消息。然后,'工作%1 ...完成'。
当您要求提供脚本时,我们也可以这样做
#!/bin/bash
if [[ ! -d "$1" ]] ; then
echo "usage: b2zipper /path/to/dir/to/search" 1>&2
exit 1
if
find "$1" -type f | egrep -v '\.bz2' | xargs bzip2 -9 &
将其另存为b2zipper
,然后使用
chmod +x b2zipper
IHTH
答案 1 :(得分:0)
为了建立在已接受的答案上,另一种选择是:
find /path/to/dir -type f -exec bzip2 {} \;