Зацикливание файлов с расширением не работает - PullRequest
0 голосов
/ 08 октября 2019

У меня есть несколько Name*.txt файлов в /home/user/my/path/to/my/data/, среди других файлов с различными расширениями. Я хотел бы зациклить их, а затем использовать отдельные имена файлов в коде, поэтому общие решения, такие как this , не будут работать, поскольку переменная $ f в каждом цикле хранит весь путьвместе с именем файла. Я нуждаюсь в них отдельно, чтобы выполнить что-то вроде "примера выполнения" ниже. Мои попытки:

Попытка № 1:

#!/bin/bash

datapath="/home/user/my/path/to/my/data/"
outpath="/home/user/my/path/to/my/outputs/"

for f in $(ls $datapath"Name*.txt"); do
        echo $f
        ...
        cp $datapath$f $outpath"example_task"${f:0:10}
done

Это не сработало: ls: cannot access /home/user/my/path/to/my/data/Name*.txt: No such file or directory. Хотя на терминале работает ls /home/user/my/path/to/my/data/Name*.txt отлично работает. Я не могу понять, почему.

Попытка # 2:

#!/bin/bash

datapath="/home/user/my/path/to/my/data/"
outpath="/home/user/my/path/to/my/outputs/"

for f in $datapath"Name*.txt"; do
        echo $f
        ...
        cp $datapath$f $outpath"example_task"${f:0:10}
done

Здесь каждый $f содержит полный список файлов, которые ls Name*.txt обычно возвращаети не по одному, как можно было бы ожидать.

Как мне это сделать? Любые предложения будут высоко оценены.

1 Ответ

1 голос
/ 08 октября 2019

Может быть, я здесь не на том пути, но это сработало для меня.

#!/bin/bash

datapath="/home/user/my/path/to/my/data/" 
outpath="/home/user/my/path/to/my/outputs/"

cd $datapath

for f in ./*.txt; do
        file=$(echo $f | cut -d '/' -f 2)

        echo $file
        ...
        cp $f $outpath"example_task"$file 
done
cd 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...