скрипт оболочки для чтения имени файла из текстового файла строка за строкой и подтверждения их наличия в двух разных каталогах

скрипт оболочки для чтения имени файла из текстового файла строка за строкой и подтверждения их наличия в двух разных каталогах

01.02.2020 11:23:08 Просмотров 29 Источник

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

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/60020809/shell-script-to-read-filename-from-a-text-file-line-by-line-and-to-confirm-they#comment106149363_60020809
Разве в списке нет конца строки MSWin?
https://stackoverflow.com/questions/60020809/shell-script-to-read-filename-from-a-text-file-line-by-line-and-to-confirm-they#comment106150139_60020809
Может быть, переписать цикл так: `` с именем В $@ делать, если [е $имя_файла ] || [ -е /демо/ОГРН/$имя_файла ]; тогда Echo "файл найден!!!! "else echo" not found $filename "fi done" ` (форматирование не работает для меня atm)

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

Является ответом!
Jetchisel

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!
https://stackoverflow.com/questions/60020809/shell-script-to-read-filename-from-a-text-file-line-by-line-and-to-confirm-they/60023623#comment106249712_60023623
проблема, с которой я столкнулся, потому что я скопировал текст с машины windows в машину linux, и проблема была из-за mswin-конца строки..Спасибо @choroba за комментарий.
Закрыть X