查找文件并执行命令

15

我有许多分别放在各自文件夹中的rar压缩文件,并希望编写脚本来将它们全部解压。

我不知道该怎样实现这个想法,需要一些帮助。

#!/bin/bash
## For all inodes
for i in pwd; do
    ## If it's a directory
    if [ -d "$i" ] then
        cd $i

        ## Find ".rar" file
        for [f in *.rar]; do
            ./bin/unrar x "$f" # Run unrar command on filename
            cd ..
        done
    done
done

我对bash脚本不熟悉,我认为代码可能有多个错误。但我猜想这应该是基本结构。

2个回答

26
你可以使用find命令:
find -name '*.rar' -exec unrar x {} \;

find 提供了 exec 选项,可以对找到的每个文件执行该命令。


“find”以我发布的方式使用,将防止您遇到太多打开文件错误。我猜您做了类似于“find foo * ...”的操作,这意味着您已经使用了目录名称的通配符(或者其他我不知道的东西)。请随时就您特定的问题提问。在此处放下问题链接,我会去看一下。 - hek2mgl
问题显然出在 for i in 'ls /var/cpanel/users/'; 这一行。应该改为 for i in /var/cpanel/users/* - hek2mgl
@Luka 问题在于"*.jpg" - 它没有加引号,看一下。它将扩展到该文件夹中的所有jpg文件,从而触发该错误。您要查找的命令是:for i in /var/cpanel/users/*; do sudo -H -u "$i" find "/home/$i/public_html" -type f -name '*.jpg' -execdir jpegoptim {} \; ; done - hek2mgl
如果您感到满意,请让我们删除这些评论,它们会误导人。 - hek2mgl
@anil 是的,find ... -print -exec unrar x {} \; - hek2mgl
显示剩余2条评论

10

不需要脚本。

find . -name "*.rar" -exec unrar x {} \;

此外,您可以将查找的结果传递给 unrar 命令。
find . -name "*.rar" | xargs unrar x

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接