сценарий, не работающий

Я очень плохо знаком с Linux, я пытаюсь получить названия .ogg файлов от текстового файла и взять mp3 файлы музыки каталога и переименовать и переместить их в другой каталог с названием того файла линию за линией, но не работаю. shellcheck.net показывает этот вывод:

f ссылаемый, но не присвоенный

Я не могу понять это.

#!/bin/bash
while -r read f;
do
for mp3 in ./music/*; 
   do
     "mv $mp3 /home/shady/Music/$f"
                  ^––SC2154 f is referenced but not assigned.
   break
   done
done < /home/shady/piku.txt

Обновление:

*

motegi_2004.ogg
assen_2004.ogg
phakisa_2004.ogg
donington_2004.ogg
catalunya_2004.ogg
strange_symbol.ogg
credits.ogg
philip_2004.ogg
jerez_2004.ogg
brno_2004.ogg
sepang_2004.ogg
estoril_2004.ogg
motogp.ogg
frontend.ogg
valencia_2004.ogg
lemans_2004.ogg
rio_2004.ogg
mugello_2004.ogg
sachsenring_2004.ogg
thqintro.ogg
qatar_2004.ogg
training_2004.ogg
climax.ogg

*

piku.txt содержит эти имена и для разрывов замкнутой цепи после перемещения первого файла как ogg в другом каталоге поэтому, когда цикл хитрости берет следующее имя от строки 2 из piku.txt для цикла, берет первый файл, который это находит в каталоге в нашем случае, это - причина файла 2, которую мы уже переместили предыдущий, один к другому каталогу.And не волнуется о mp3s bening, переименованном как oggs, это - просто тест. Я просто хочу знать, работает ли это

править: 2

 1  #!/bin/bash
   2  while read -r f
   3  do
   4    for mp3 in /home/shady/Desktop/music/* 
   5    do
   6                mv -i "$mp3" "/home/shady/Music/$f"
   7                break
   8    done
   9    done < /home/shady/piku.txt
  10  

я присвоил полный путь теперь для для цикла, но он дает мне

mv: не может статистика ‘/home/shady/Desktop/music /* ’: Никакой такой файл или каталог


*

motegi_2004.ogg
assen_2004.ogg
phakisa_2004.ogg
donington_2004.ogg
catalunya_2004.ogg
strange_symbol.ogg
credits.ogg
philip_2004.ogg
jerez_2004.ogg
brno_2004.ogg
sepang_2004.ogg
estoril_2004.ogg
motogp.ogg
frontend.ogg
valencia_2004.ogg
lemans_2004.ogg
rio_2004.ogg
mugello_2004.ogg
sachsenring_2004.ogg
thqintro.ogg
qatar_2004.ogg
training_2004.ogg
climax.ogg

*

piku.txt содержит эти имена и для разрывов замкнутой цепи после перемещения первого файла как ogg в другом каталоге поэтому, когда цикл хитрости берет следующее имя от строки 2 из piku.txt для цикла, берет первый файл, который это находит в каталоге в нашем случае, это - причина файла 2, которую мы уже переместили предыдущий, один к другому каталогу.And не волнуется о mp3s bening, переименованном как oggs, это - просто тест. Я просто хочу знать, работает ли это

править: 2

 1  #!/bin/bash
   2  while read -r f
   3  do
   4    for mp3 in /home/shady/Desktop/music/* 
   5    do
   6                mv -i "$mp3" "/home/shady/Music/$f"
   7                break
   8    done
   9    done < /home/shady/piku.txt
  10  

я присвоил полный путь теперь для для цикла, но он дает мне

mv: не может статистика ‘/home/shady/Desktop/music /* ’: Никакой такой файл или каталог

0
задан 7 January 2016 в 19:05

1 ответ

Эти -r не помогает здесь, попытайтесь поместить его после read.

Дополнительный: После while и for Вам или нужно ; или новая строка, но Вам не нужны оба! Так как у Вас есть новые строки перед эти do ключевые слова, можно удалить те два ; с.

Кавычки должны обойти аргументы, не целую команду:

    mv -i "$mp3" "/home/shady/Music/$f"

я добавил -i так, чтобы mv не пытался перезаписать любые существующие файлы.

Кардинально, у Вас есть цикл в цикле. Вы не можете переместить один mp3 файл многократно! Если Вы хотите смешать два набора имен файлов, Вы могли бы попытаться использовать paste, чтобы вытянуть строки из каждого файла и объединить их:

paste <(find ./music/* -maxdepth 1 -printf '"%p"\n') /home/shady/piku.txt | sed 's+^+mv -i +' > /tmp/move_my_files.sh

Затем можно посмотреть на файл, который Вы генерировали, и посмотрите, делает ли он то, что Вы хотите.

(Вы, возможно, должны поместить кавычки вокруг всех имен файлов в piku.txt, если они содержат пробелы.)

, Если Вы довольны тем, как move_my_files.sh взгляды сценария, можно выполнить его:

bash -e -x /tmp/move_my_files.sh

, Если я неправильно понял Ваше намерение, Вы, возможно, должны объяснить лучше, включая содержание piku.txt и ожидаемого результата, и как mp3 файлы становятся ogg файлы!

4
ответ дан 26 July 2019 в 10:01

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

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