скрипт оболочки для чтения имени файла из текстового файла строка за строкой и подтверждения их наличия в двух разных каталогах
у меня есть требование прочитать список файлов из текстового файла и искать эти файлы в двух разных каталогах в unix,если его нет, мне нужно распечатать имя файла.Я написал следующий сценарий оболочки
#!usr/bin/ksh
while
read -r filename ; do
if [ -e $filename ] || [ -e /demo/bin/$filename ];
then
echo "File Found!!!! "
else
echo "not found $filename"
fi
done < "$1"
Но проблема в том, что если я жестко закодирую имя файла в скрипте, он покажет файл найден. но без жесткого кодирования имя, если я выполняю тот же скрипт то же имя файла он показывает не найден. Я сохранил все имя файла, который мне нужно искать в другом файле, имя которого как abc.формат txt.
я выполняю выше сценарий, как sh isFileExist.sh Азбука.формат txt





Ответы - скрипт оболочки для чтения имени файла из текстового файла строка за строкой и подтверждения их наличия в двух разных каталогах / shell script to read filename from a text file line by line and to confirm they are present in two different directories

02.02.2020 08:59:56
Я создал тестовые каталоги и файлы, чтобы показать, как это можно сделать.
Создание каталогов dir1 and
Директория dir2`
mkdir -p dir{1..2}
Проверьте каталоги.
ls
dir1 dir2
Создание файлов.
touch dir{1..2}/{1..10}.txt
Проверьте файлы.
ls dir{1..2}/
dir1/:
10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
dir2/:
10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
Создайте содержимое файла.
printf '%s\n' {1..10}.txt > list_of_files.txt
printf '%s\n' {a..c} >> list_of_files.txt
Проверьте содержимое файла.
cat list_of_files.txt
Выход есть
1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
9.txt
10.txt
a
b
c
Переменной foo
это dir1
и переменной bar
находится dir2
в сценарий.
#!/bin/sh
foo=dir1
bar=dir2
while read -r files_in_text; do
if [ ! -e "$foo"/"$files_in_text" ] && [ ! -e "$bar"/"$files_in_text" ]; then
printf 'files %s and %s does not exists!\n' "$foo"/"$files_in_text" "$bar"/"$files_in_text"
else
printf 'files %s and %s does exists.\n' "$foo"/"$files_in_text" "$bar"/"$files_in_text"
fi
done < list_of_files.txt
Выход должен быть
files dir1/1.txt and dir2/1.txt does exists.
files dir1/2.txt and dir2/2.txt does exists.
files dir1/3.txt and dir2/3.txt does exists.
files dir1/4.txt and dir2/4.txt does exists.
files dir1/5.txt and dir2/5.txt does exists.
files dir1/6.txt and dir2/6.txt does exists.
files dir1/7.txt and dir2/7.txt does exists.
files dir1/8.txt and dir2/8.txt does exists.
files dir1/9.txt and dir2/9.txt does exists.
files dir1/10.txt and dir2/10.txt does exists.
files dir1/a and dir2/a does not exists!
files dir1/b and dir2/b does not exists!
files dir1/c and dir2/c does not exists!
