Хорошо, речь идет о моей пятой ветке по этой теме, потому что я потерял сознание во всех аспектах этого ужасного задания.Я использовал другие решения, которые отлично работали, но не могут быть использованы, например, с помощью команды awk
, sed
и comm
.Вместо этого, я должен сделать это трудным путем.
Я так потерян, на данный момент я даже не делаю это, чтобы передать это, потому что это ноль, так как он истек срок, я рвалмои волосы в течение прошлых 18 часов, пытающихся сделать это только ради того, чтобы сделать это.Буду очень признателен, если вы сможете уберечь меня от попадания пули в мою голову.
Точка назначения: Вы должны написать сценарий оболочки Bash, который поможет сравнить содержимое двух каталогов.Напишите утилиту, которая удовлетворяет следующим требованиям:
- Ваш скрипт будет сравнивать имена файлов в двух каталогах и перечислять информацию о именах файлов, которые находятся в одном каталоге, но не в другом.Перечисленная информация будет длинным списком каждого файла, аналогично команде "ls -l".Имена каталогов должны быть указаны, включая любые обязательные абсолютные или относительные пути.
- Ваш сценарий будет работать для всех типов файлов, включая каталоги, содержащиеся в указанных каталогах.Сценарий выведет соответствующее сообщение об ошибке, если число переданных ему аргументов не равно 2 или если указанные имена каталогов не являются именами допустимых существующих каталогов.Если выдается сообщение об ошибке, сценарий должен завершиться со статусом выхода 1 (один).В противном случае он должен заканчиваться состоянием выхода 0 (ноль).
Технические характеристики:
- Файлы в каталоге, для которого предполагается использовать этот скриптдля работы не имеют разрешения на выполнение, только чтение, которое, если я не ошибаюсь, может отображать только имена файлов, поэтому мы не можем видеть содержимое файла.Я пытался, я получил отказано в разрешении.
- Всю информацию, касающуюся этого задания, можно найти здесь: https://cs.senecac.on.ca/~lczegel/BTO120/assign1/assign1.html
Что я сделал:
#!/bin/bash
if [ ! -d $1 ]
then
echo $1 is not a valid existing directory >&2
exit 1
elif [ ! -d $2 ]
then
echo $2 is not a valid existing directory >&2
exit 1
elif [ $# = 0 ]
then
echo Usage: compdir dir-name1 dir-name2 >&2
exit 1
elif [ $# = 1 ]
then
echo Usage: compdir dir-name1 dir-name2 >&2
exit 1
elif [ $# = 2 ]
then
ls -a $1 > temp1
ls -a $2 > temp2
cat temp1 |
while read input
do
grep -Fvf temp1 temp2 > temp1_diff
done
cat ~temp2 |
while read input
do
grep -Fvf temp2 temp1 > temp2_diff
done
#Files that are in $1 but not in $2
cat temp1_diff |
while read input
do
Files that are in $1 but not in $2
cd $2
ls -la `cat ../temp1_diff`
done
cd ..
echo -e
#Files that are in $2 but not in $1
cat temp2_diff |
while read input
do
Files that are in $2 but not in $1
cd $1
ls -la `cat ../temp2_diff`
done
elif [ $# = 3 ]
then
echo Usage: compdir dir-name1 dir-name2 >&2
exit 1
else
echo Usage: compdir dir-name1 dir-name2 >&2
exit 1
fi
Проблемы, с которыми я сталкиваюсь:
- Он не будет записывать файлы, содержащие символы, такие как точки или пробелы, или что-либо в них, в temp1_diff и temp2_diff.
- Я не могу получить эхо-сигнал, даже если он находится до или в цикле.
- Я получаю постоянные ошибки, из-за которых невозможно перейти к $ 1 или $ 2 и т. Д.