需要一个 shell 脚本,bzip2 的每个文件从某个文件夹递归
Need a shell script that bzip2's every single file recursively from a certain folder
我知道写那些剧本真的不是我的强项。
我需要一个 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
希望你能帮帮我
bzip2
将接受多个文件作为命令行上的参数。为了解决你的具体例子,我会做
cd /home/user/
find . -type f | egrep -v '\.bz2' | xargs bzip2 -9 &
这将找到 /home/user
下的所有文件,从处理中排除任何已经存在的 .bz2
文件,然后通过 xargs
将剩余列表发送到 bzip2
。 -9
为您提供最大压缩(但需要更多时间)。使用 xargs
来提供命令(在本例中为 bzip2
)时,可以处理的文件名的数量或长度没有限制。
&
字符表示 "run all of this in the background"。这意味着命令提示符将立即 return 给你,你继续其他工作,但不要指望所有文件都被压缩一段时间。在某些时候,您还会收到 'Job %1 ... started' 等消息,之后会收到 'Job %1 ... finished'.
正如您要求的脚本,我们也可以这样做
#!/bin/bash
if [[ ! -d "" ]] ; then
echo "usage: b2zipper /path/to/dir/to/search" 1>&2
exit 1
if
find "" -type f | egrep -v '\.bz2' | xargs bzip2 -9 &
将其保存为 b2zipper
,然后使用
使其可执行
chmod +x b2zipper
IHTH
要基于已接受的答案,替代方案是:
find /path/to/dir -type f -exec bzip2 {} \;
我知道写那些剧本真的不是我的强项。 我需要一个 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
希望你能帮帮我
bzip2
将接受多个文件作为命令行上的参数。为了解决你的具体例子,我会做
cd /home/user/
find . -type f | egrep -v '\.bz2' | xargs bzip2 -9 &
这将找到 /home/user
下的所有文件,从处理中排除任何已经存在的 .bz2
文件,然后通过 xargs
将剩余列表发送到 bzip2
。 -9
为您提供最大压缩(但需要更多时间)。使用 xargs
来提供命令(在本例中为 bzip2
)时,可以处理的文件名的数量或长度没有限制。
&
字符表示 "run all of this in the background"。这意味着命令提示符将立即 return 给你,你继续其他工作,但不要指望所有文件都被压缩一段时间。在某些时候,您还会收到 'Job %1 ... started' 等消息,之后会收到 'Job %1 ... finished'.
正如您要求的脚本,我们也可以这样做
#!/bin/bash
if [[ ! -d "" ]] ; then
echo "usage: b2zipper /path/to/dir/to/search" 1>&2
exit 1
if
find "" -type f | egrep -v '\.bz2' | xargs bzip2 -9 &
将其保存为 b2zipper
,然后使用
chmod +x b2zipper
IHTH
要基于已接受的答案,替代方案是:
find /path/to/dir -type f -exec bzip2 {} \;