正如问题所暗示的,我正在努力压缩我的脚本以尽可能少的代码行来运行它,而不是声明多个 if 语句。

这样做的目的是在 Audacity 中创建一个自动化脚本来规范我的音乐库的音频、窗口检测和其他工作,我只是想弄清楚如何压缩它以便用更少的代码运行。

提前感谢您的帮助。

##代码片段##

#!/bin/bash

media=0
loop=0
cd "/home/satan/Music/.processing/"
while [[ $media -eq 0 ]]
  do
    if [[ "$media" -gt '0' ]]
    then
      break
    else
      cd *
    fi

    aa=`ls -1 *.aa 2>/dev/null | wc -l`
    if [ $aa != 0 ]
    then
      media=$((aa+media))
      echo $aa "aa files found in"
      pwd
      echo
      ls -1
      echo
    fi

    aac=`ls -1 *.aac 2>/dev/null | wc -l`
    if [ $aac != 0 ]
    then
      media=$((aac+media))
      echo $aac "aac files found in"
      pwd
      echo
      ls -1
      echo
    fi

    aax=`ls -1 *.aax 2>/dev/null | wc -l`
    if [ $aax != 0 ]
    then
      media=$((aax+media))
      echo $aax "aax files found in"
      pwd
      echo
      ls -1
      echo
    fi

    act=`ls -1 *.act 2>/dev/null | wc -l`
    if [ $act != 0 ]
    then
      media=$((act+media))
      echo $act "act files found in"
      pwd
      echo
      ls -1
      echo
    fi

    aiff=`ls -1 *.aiff 2>/dev/null | wc -l`
    if [ $aiff != 0 ]
    then
      media=$((aiff+media))
      echo $aiff "aiff files found in"
      pwd
      echo
      ls -1
      echo
    fi

    alac=`ls -1 *.alac 2>/dev/null | wc -l`
    if [ $alac != 0 ]
    then
      media=$((alac+media))
      echo $alac "alac files found in"
      pwd
      echo
      ls -1
      echo
    fi

    ape=`ls -1 *.ape 2>/dev/null | wc -l`
    if [ $ape != 0 ]
    then
      media=$((ape+media))
      echo $ape "ape files found in"
      pwd
      echo
      ls -1
      echo
    fi

    au=`ls -1 *.au 2>/dev/null | wc -l`
    if [ $au != 0 ]
    then
      media=$((au+media))
      echo $au "au files found in"
      pwd
      echo
      ls -1
      echo
    fi

    dss=`ls -1 *.dss 2>/dev/null | wc -l`
    if [ $dss != 0 ]
    then
      media=$((dss+media))
      echo $dss "dss files found in"
      pwd
      echo
      ls -1
      echo
    fi

    dvf=`ls -1 *.dvf 2>/dev/null | wc -l`
    if [ $dvf != 0 ]
    then
      media=$((dvf+media))
      echo $dvf "dvf files found in"
      pwd
      echo
      ls -1
      echo
    fi

    flac=`ls -1 *.flac 2>/dev/null | wc -l`
    if [ $flac != 0 ]
    then
      media=$((flac+media))
      echo $flac "flac files found in"
      pwd
      echo
      ls -1
      echo
    fi

    gsm=`ls -1 *.gsm 2>/dev/null | wc -l`
    if [ $gsm != 0 ]
    then
      media=$((gsm+media))
      echo $gsm "gsm files found in"
      pwd
      echo
      ls -1
      echo
    fi

    iklax=`ls -1 *.iklax 2>/dev/null | wc -l`
    if [ $iklax != 0 ]
    then
      media=$((iklax+media))
      echo $iklax "iklax files found in"
      pwd
      echo
      ls -1
      echo
    fi

    ivs=`ls -1 *.ivs 2>/dev/null | wc -l`
    if [ $ivs != 0 ]
    then
      media=$((ivs+media))
      echo $ivs "ivs files found in"
      pwd
      echo
      ls -1
      echo
    fi

    m4a=`ls -1 *.m4a 2>/dev/null | wc -l`
    if [ $m4a != 0 ]
    then
      media=$((m4a+media))
      echo $m4a "m4a files found in"
      pwd
      echo
      ls -1
      echo
    fi

    m4b=`ls -1 *.m4b 2>/dev/null | wc -l`
    if [ $m4b != 0 ]
    then
      media=$((m4b+media))
      echo $m4b "m4b files found in"
      pwd
      echo
      ls -1
      echo
    fi

    m4p=`ls -1 *.m4p 2>/dev/null | wc -l`
    if [ $m4p != 0 ]
    then
      media=$((m4p+media))
      echo $m4p "m4p files found in"
      pwd
      echo
      ls -1
      echo
    fi

    mmf=`ls -1 *.mmf 2>/dev/null | wc -l`
    if [ $mmf != 0 ]
    then
      media=$((mmf+media))
      echo $mmf "mmf files found in"
      pwd
      echo
      ls -1
      echo
    fi

    movpkg=`ls -1 *.movpkg 2>/dev/null | wc -l`
    if [ $movpkg != 0 ]
    then
      media=$((movpkg+media))
      echo $movpkg "movpkg files found in"
      pwd
      echo
      ls -1
      echo
    fi

    mpc=`ls -1 *.mpc 2>/dev/null | wc -l`
    if [ $mpc != 0 ]
    then
      media=$((mpc+media))
      echo $mpc "mpc files found in"
      pwd
      echo
      ls -1
      echo
    fi

    mp3=`ls -1 *.mp3 2>/dev/null | wc -l`
    if [ $mp3 != 0 ]
    then
      media=$((mp3+media))
      echo $mp3 "mp3 files found in"
      pwd
      echo
      ls -1
      echo
    fi

    msv=`ls -1 *.msv 2>/dev/null | wc -l`
    if [ $msv != 0 ]
    then
      media=$((msv+media))
      echo $msv "act files found in"
      pwd
      echo
      ls -1
      echo
    fi

    nmf=`ls -1 *.nmf 2>/dev/null | wc -l`
    if [ $nmf != 0 ]
    then
      media=$((nmf+media))
      echo $nmf "nmf files found in"
      pwd
      echo
      ls -1
      echo
    fi

    ogg=`ls -1 *.ogg 2>/dev/null | wc -l`
    if [ $ogg != 0 ]
    then
      media=$((ogg+media))
      echo $ogg "ogg files found in"
      pwd
      echo
      ls -1
      echo
    fi

    oga=`ls -1 *.oga 2>/dev/null | wc -l`
    if [ $oga != 0 ]
    then
      media=$((oga+media))
      echo $oga "oga files found in"
      pwd
      echo
      ls -1
      echo
    fi

    mogg=`ls -1 *.mogg 2>/dev/null | wc -l`
    if [ $mogg != 0 ]
    then
      media=$((mogg+media))
      echo $mogg "mogg files found in"
      pwd
      echo
      ls -1
      echo
    fi

    opus=`ls -1 *.opus 2>/dev/null | wc -l`
    if [ $opus != 0 ]
    then
      media=$((opus+media))
      echo $opus "opus files found in"
      pwd
      echo
      ls -1
      echo
    fi

    ra=`ls -1 *.ra 2>/dev/null | wc -l`
    if [ $ra != 0 ]
    then
      media=$((ra+media))
      echo $ra "ra files found in"
      pwd
      echo
      ls -1
      echo
    fi

    rm=`ls -1 *.rm 2>/dev/null | wc -l`
    if [ $rm != 0 ]
    then
      media=$((rm+media))
      echo $rm "rm files found in"
      pwd
      echo
      ls -1
      echo
    fi

    raw=`ls -1 *.raw 2>/dev/null | wc -l`
    if [ $raw != 0 ]
    then
      media=$((raw+media))
      echo $raw "raw files found in"
      pwd
      echo
      ls -1
      echo
    fi

    rt64=`ls -1 *.rt64 2>/dev/null | wc -l`
    if [ $rt64 != 0 ]
    then
      media=$((rt64+media))
      echo $rt64 "rt64 files found in"
      pwd
      echo
      ls -1
      echo
    fi

    sln=`ls -1 *.sln 2>/dev/null | wc -l`
    if [ $sln != 0 ]
    then
      media=$((sln+media))
      echo $sln "sln files found in"
      pwd
      echo
      ls -1
      echo
    fi

    tta=`ls -1 *.tta 2>/dev/null | wc -l`
    if [ $tta != 0 ]
    then
      media=$((tta+media))
      echo $tta "tta files found in"
      pwd
      echo
      ls -1
      echo
    fi

    voc=`ls -1 *.voc 2>/dev/null | wc -l`
    if [ $voc != 0 ]
    then
      media=$((voc+media))
      echo $voc "voc files found in"
      pwd
      echo
      ls -1
      echo
    fi

    vox=`ls -1 *.vox 2>/dev/null | wc -l`
    if [ $vox != 0 ]
    then
      media=$((vox+media))
      echo $vox "vox files found in"
      pwd
      echo
      ls -1
      echo
    fi

    wav=`ls -1 *.wav 2>/dev/null | wc -l`
    if [ $wav != 0 ]
    then
      media=$((wav+media))
      echo $wav "wav files found in"
      pwd
      echo
      ls -1
      echo
    fi

    wma=`ls -1 *.wma 2>/dev/null | wc -l`
    if [ $wma != 0 ]
    then
      media=$((wma+media))
      echo $wma "wma files found in"
      pwd
      echo
      ls -1
      echo
    fi

    webm=`ls -1 *.webm 2>/dev/null | wc -l`
    if [ $webm != 0 ]
    then
      media=$((webm+media))
      echo $webm "webm files found in"
      pwd
      echo
      ls -1
      echo
    fi

    cda=`ls -1 *.cda 2>/dev/null | wc -l`
    if [ $cda != 0 ]
    then
      media=$((cda+media))
      echo $cda "cda files found in"
      pwd
      echo
      ls -1
      echo
    fi

    threegp=`ls -1 *.3gp 2>/dev/null | wc -l`
    if [ $threegp != 0 ]
    then
      media=$((threegp+media))
      echo $threegp "3gp files found in"
      pwd
      echo
      ls -1
      echo
    fi

    eightsvx=`ls -1 *.8svx 2>/dev/null | wc -l`
    if [ $eightsvx != 0 ]
    then
      media=$((eightsvx+media))
      echo $eightsvx "8svx files found in"
      pwd
      echo
      ls -1
      echo
    fi
done
nohup pcmanfm >/dev/null 2>&1 &

2

  • 关于while [[ $media -eq 0 ]] do if [[ "$media" -gt '0' ]]media在循环开始时不能大于 0,只有当media等于 0 时才会 [重新] 进入,因此请您的问题以解释您尝试使用该if语句做什么。还请解释要做什么cd *


    – 

  • 你在脚本顶部选择的用户名cd "/home/..可能会让一些读者感到不快,因为他们可能想帮助你,但不想用这个名字发布任何内容,你可能想选择一个不那么有争议的名字,比如bob


    – 


最佳答案
2

bash for 循环可以处理这个问题。

suffixes="aa aac aax ..."
for suffix in $suffixes
do
    this=`ls -1 *.$suffix 2>/dev/null | wc -l`
    if [ $this != 0 ]
    then
      media=$((this+media))
      echo $this " files found in"
      pwd
      echo
      ls -1
      echo
    fi
done

4

  • 我会尝试一下,最后要补充一点,如果可以在所述目录中找到它,我应该在哪里添加“cd *”来切换目录?


    – 

  • 另外,我已经运行了 for 循环,工作正常,while 循环作为切换目录的函数有帮助吗?


    – 

  • 没关系,搞清楚了!谢谢!非常感谢能为我的 bash 代码库添砖加瓦!


    – 


  • 您应该将其复制/粘贴到中并修复它告诉您的问题。


    – 

我无法弄清楚您要用loopmedia变量或但是做什么cd *,否则,这似乎就是您要做的事情:

#!/usr/bin/env bash

shopt -s nullglob

media=0
loop=0
cd '/home/whatever/' || exit 1

sfxs=( aa aac aax ... 8svx )
for sfx in "${sfxs[@]}"; do
    files=( *."$sfx" )
    numFiles="${#files[@]}"
    if (( numFiles != 0 )); then
        media=$(( numFiles + media ))
        printf '%d %s files found in %s\n' "$numFiles" "$sfx" "$PWD"
        printf '\n'
        printf '%s\n' "${files[@]}"
        printf '\n'
    fi
done

nohup pcmanfm >/dev/null 2>&1 &

显然,...用您感兴趣的其余后缀替换,但您可能更喜欢只使用目录中存在的任何后缀的脚本,而不是在脚本中硬编码列表,例如使用 GNU sed -z

#!/usr/bin/env bash

shopt -s nullglob

media=0
loop=0
cd '/home/whatever/' || exit 1

sfxs=( $(printf '%s\0' * | sed -z 's/.*\.//' | sort -u) )

for sfx in "${sfxs[@]}"; do
    files=( *."$sfx" )
    numFiles="${#files[@]}"
    media=$(( numFiles + media ))
    printf '%d %s files found in %s\n' "$numFiles" "$sfx" "$PWD"
    printf '\n'
    printf '%s\n' "${files[@]}"
    printf '\n'
done

nohup pcmanfm >/dev/null 2>&1 &

以上两项均未经测试。