Я пытаюсь выяснить, действительно ли на моем диске в myFiles есть папка из моего list.txt. Но единственный вывод, который я получаю, это " Совпадение не найдено ", это bs, потому что я знаю, что некоторые из этих папок реальны. Я считаю, что что-то не так с условием Если , но я не знаю, что.
Кстати, переменная fileFolder должна быть в кавычках, в противном случае я получаю " ожидаемую унарную операцию ».
Эта команда find myFiles/ -name $fileList -printf '%f\n'
обрезает путь к папке, поэтому вместо / home / michael / myFiles / folder_1 я получаю только folder_1.
Содержимое list.txt:
папка_1 папка_2 папка_3 папка_4
Содержимое папки myFiles:
папка_1 папка_3 папка_5 папка_6
В любом случае, спасибо за ваши ответы и время.
#!/bin/bash
for i in $(cat list.txt);do
fileList=`echo $i`
fileFolder=`find myFiles/ -name $fileList -printf '%f\n'`
if [ $fileList == "$fileFolder" ]; then
echo "Found match $fileFolder"
else
echo "No match found"
fi
done
ОБНОВЛЕНИЕ: я забыл упомянуть, что я запускаю этот скрипт на Ubuntu под Win10. Итак, я протестировал мой скрипт на виртуальной машине, и он прекрасно работает :) Но мне нужно, чтобы он работал на Ubuntu, работающем под Win10: /
ОБНОВЛЕНИЕ 2: Я запускаю свой скрипт с bash -x и это пример того, что я получаю
++ cat list.txt
+ for i in $(cat list.txt)
++ echo $'Folder_1\r'
+ fileList=$'Folder_1\r'
+ echo $'Folder_1\r'
Folder_1
++ find myFiles/ -name $'Folder_1\r' -printf '%f\n'
+ fileFolder=
+ '[' $'Folder_1\r' == '' ']'
+ echo 'No match found'
No match found
Я думаю, что это проблема: fileList = $ 'Folder_1 \ r'. Не должно быть этой части -> \ r
РЕШЕНО: Я загрузил dos2 unix a ran dos2 unix list.txt в командной строке. Скрипт наконец работает. Спасибо!