Сценарий оболочки для создания папки с именем файла и копирования файлов внутри

У меня есть список, который выглядит следующим образом

ABC_100.0_k_1x1x1.xyz
ABC_100.0_k_1x1x1.txt
ABC_100.0_k_2x2x2.xyz
ABC_100.0_k_2x2x2.txt
ABC_100.0_k_10x10x10.xyz
ABC_100.0_k_10x10x10.txt
ABC_600.0_k_1x1x1.xyz
ABC_600.0_k_1x1x1.txt
ABC_1000.0_k_1x1x1.xyz
ABC_1000.0_k_1x1x1.txt

Я хочу написать скрипт, который создает следующие папки

ABC_100.0_k_1x1x1
ABC_100.0_k_2x2x2
ABC_100.0_k_10x10x10
ABC_600.0_k_1x1x1
ABC_1000.0_k_1x1x1

Я попробовал следующее

#!/bin/bash

for file in *_???.*_?x?x?.*
    do
        dir=${file%}
        dir=${dir%.*}
        mkdir -p "./$dir" &&
        scp -r "$file" "./$dir"
done

Но я получаю только папки

ABC_100.0_k_1x1x1
ABC_600.0_k_1x1x1

Что я делаю не так? Возможно, это глупо, но это была моя первая попытка сценариев оболочки

0
задан 14 May 2020 в 20:08

3 ответа

Альтернативный сценарий:

#!/bin/bash

for file in *_*.*_*x*x*.*
    do
        dir=${file%}
        dir=${dir%.*}
        #if [ ! -d "$dir" ];
        #then
                mkdir -p "./$dir"

        #fi
        scp -r "$file" "./$dir"
done

Символ? заменить один символ, чтобы он соответствовал только последовательности 1x1x1 или 2x2x2, а не 10x10x10 (10 состоит из двух символов). Я добавил оператор if, чтобы не создавать заново ту же папку.

1
ответ дан 19 June 2020 в 21:39

Если все файлы сопряжены, либо с .txt , либо с .xyz , тогда простым решением будет

for file in ABC*.txt
do
   mkdir `basename $file .txt`
done
0
ответ дан 19 June 2020 в 21:39

Вот быстрый и грязный скрипт, который работает:

#!/bin/bash

for file in *.???
    do
        dir=${file%.*}  # cuts off the suffix
    mkdir -p $dir
    scp "$file" "$dir"
    done

Некоторые из ваших файлов не соответствуют шаблону _ ???. _? х? х?. *

0
ответ дан 19 June 2020 в 21:39

Другие вопросы по тегам:

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