сценарий оболочки для чтения имени файла из текстового файла построчно и подтверждения их наличия в двух разных каталогах - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть требование прочитать список файлов из текстового файла и найти их в двух разных каталогах в 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"

Но проблема в том, что если я жестко закодировал имя файла в сценарии, он показывает файл найден. но без жесткого кодирования имени, если я выполняю тот же скрипт, то же имя файла, которое он показывает, не найдено. Я сохранил все имена файлов, которые мне нужно искать, в другом файле с именем ab c .txt.

Я выполняю приведенный выше скрипт, например sh isFileExist. sh ab c .txt

1 Ответ

1 голос
/ 02 февраля 2020

Я создал тестовые каталоги и файлы, чтобы показать, как это можно сделать.

Создать каталоги 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!
...