Прочитайте список файлов из текстового файла, переместите их с сохранением структуры каталогов в bash

Los nuevos operadores ;&y ;;&se introdujeron en Bash4.0 y aunque ambos pueden ser útiles en situaciones similares, creo no sirven de nada en tu caso. Esto es lo que man bashdice sobre estos operadores:

If the ;; operator is used, no subsequent matches are attempted after the first pattern match. Using ;& in place of ;; causes execution to continue with the list associated with the next set of patterns. Using ;;& in place of ;; causes the shell to test the next pattern list in the statement, if any, and execute any associated list on a successful match.

En otras palabras, ;&es una caída y, como sabemos por Cy ;;&hace que bashverifique los casos restantes en lugar de regresar de casebloque por completo. Puede encontrar un buen ejemplo de ;;&en acción aquí:https://stackoverflow.com/a/24544780/3691891.

Dicho esto, ni ;&ni ;;&podrían usarse en su script porque ambos irían a *)que siempre se ejecutaría.

El siguiente script funciona y hace lo que quieres sin volver a -arreglar la lógica, pero considéralo solo como un ejemplo y nunca confíes en él,es demasiado frágil. he tomado la idea de aquí:

#!/usr/bin/env bash

function jumpto
{
    label=$1
    cmd=$(sed -n "/$label:/{:a;n;p;ba};" "$0" | grep -v ':$')
    cmd=$(echo "$cmd" | sed 's,;;,,')
    cmd=$(echo "$cmd" | sed 's,esac,,')
    eval "$cmd"
}

input="foo"
VAR="1"

case $input in
foo)
    if [ $VAR = "1" ]; then

        printf "perform fallthrough\n"
        jumpto ft
    else
        printf "do not perform fallthrough\n"

    fi
;;
*)
    ft:
    echo "fallthrough worked!"
;;
esac

0
05.07.2019, 20:06
1 ответ

Укажите все имена файлов в файле. Ниже упомянутая команда переместит все имена файлов в целевой каталог:

awk '{print "mv " " " $1  " " "/Destinationpath"}' filename|sh
0
28.01.2020, 03:30

Теги

Похожие вопросы