在所有子目录级别的文件上运行脚本

时间:2017-04-06 02:45:42

标签: bash shell

我有一个用bash编写的脚本来转换文件夹中的flac文件。但是,如果文件位于我正在调用的文件夹的子目录中,则它不起作用。

例如,如果我调用一个直接包含flac文件的目录,那么脚本运行正常。如果调用的文件夹和flac文件之间有文件夹,则不会运行。

  • AlbumName/*.flac< - 在致电AlbumName时运行良好

  • AlbumName/CD1/*.flac< - 在致电AlbumName时不会运行

以下是我正在使用的代码:

for file in "$1"/*.flac
do
    if [ -f "${file}" ]; then

        # do flac conversion script

    fi
done

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用.flac获取所有find个文件,然后执行flac转换脚本,并将每个文件作为参数传递:

find . -path "*.flac" -type f -exec ./flac_converter.sh "{}" \;

此命令查找路径-type f中与字符串末尾的.匹配的每个文件(*.flac),然后对每个匹配{{1}执行-exec flac_converter.sh }。

所以例如,如果我有这个文件结构:

{}

运行该命令将产生:

$ tree flacs
flacs
    ├── asd.flac
    ├── dsa.flac
    └── more
        └── more_asd.flac

$ find . -path "*.flac" -type f -exec ./flac_converter.sh "{}" \; I'm converting ./flacs/asd.flac I'm converting ./flacs/dsa.flac I'm converting ./flacs/more/more_asd.flac 仅使用flac_converter.sh(来自$1的文件作为输入)回显该句子。请注意它顺利运行find以及./flacs/more/*.flac