Как вывести разницу файлов из двух папок и сохранить вывод с одинаковым именем в другой папке - PullRequest
0 голосов
/ 21 мая 2019

У меня есть две папки с одинаковыми именами файлов, но разным содержимым. Итак, я пытаюсь сгенерировать сценарий, чтобы получить разницу и посмотреть, что меняется. Я написал скрипт ниже:

folder1="/opt/dir1"
folder2=`ls/opt/dir2`

find "$folder1/" /opt/dir2/ -printf '%P\n' | sort | uniq -d

for item in `ls $folder1`
do
 if [[ $item == $folder2 ]]; then
  diff -r $item $folder2 >> output.txt
 fi
done

Я считаю, что этот скрипт должен работать, но он не дает никакого вывода на выходную папку. Таким образом, желаемый вывод должен быть в одном файле. Пример:

cat output.txt

diff -r /opt/folder1/file1 /opt/folder2/file1
1387c1387
<               ALL X'25' BY SPACE                                                
---

>               ALL X'0A' BY SPACE      

diff -r /opt/folder1/file2 /opt/folder2/file2
2591c2591
<               ALL X'25' BY SPACE                                                
---
>               ALL X'0A' BY SPACE 

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 21 мая 2019

Хорошо.Итак, в два раза:

  1. Сначала получите файлы в одну папку.Никогда не используйте ls.Забудь, что это существует.ls для хорошей печати в нашей консоли.В скриптах используйте find.
  2. Затем для каждого файла выполните какую-нибудь команду.Простой while read цикл.

Итак:

{
    # make find print relative to `/opr/dir1` director
    cd /opt/dir1 &&
    # Use `%P` so that print without leading `./`
    find . -mindepth 1 -type f -print "%P\n"
} |
while IFS= read -r file; do
     diff /opt/dir1/"$file" /opt/dir2/"$file" >> output/"$file"
done

Примечания:

...