То, как я делаю различную печать, копирует только?

Я пытаюсь узнать, какие файлы присутствуют в двух сравненных папках. Я только интересуюсь сравнением имен файлов.

Добавление-s к команде не добивается цели по некоторым причинам. Я хочу снова использовать список для удаления дубликатов, и удаление строк, говоря "Только в" является пустой тратой времени.

Команда:

diff -s /folder1/folder1 /folder2/folder2

Вывод:

Only in /folder1/folder1: sth.pdf
Only in /folder1/folder1: sth.png
Only in /folder1/folder1: sth.txt
Files /folder1/folder1/sthe.txt and /folder2/folder2/sthe.txt are identical
Only in /folder1/folder1: sth.pdf
Only in /folder1/folder1: sth.png
Only in /folder1/folder1: sth.txt
.
.
.

Какие-либо предложения?

2
задан 18 March 2016 в 13:48

1 ответ

Я только интересуюсь сравнением имен файлов.

Затем избегайте любого инструмента, который сравнит содержание файлов, поскольку это просто замедлит процесс.

Что происходит со мной прямо сейчас для сравнения имен файлов в этих двух каталогах, и производить только общие:

comm -12 <(cd dir1; stat -c '%n' *) <(cd dir2; stat -c '%n' *)
  • comm -12 <([...]) <([...]): сравнит вывод [...] и [...] вывод только строки, существующие в обоих файлах;
  • cd dirN; stat -c '%n' * изменит текущий рабочий каталог на dirN и вывод заказанный список имен файлов файлов в нем.
% tree
.
├── dir1
│  ├── file1
│  ├── file2
│  └── file3
└── dir2
    └── file1

2 directories, 4 files
user@user-X550CL ~/tmp % comm -12 <(cd dir1; stat -c '%n' *) <(cd dir2; stat -c '%n' *)
file1

Если необходимо иметь дело с новыми строками в именах файлов, используйте это вместо этого:

sort -z <(cd dir1; stat --printf '%n\0' *) <(cd dir2; stat --printf '%n\0' *) | uniq -zd | tr '\0' '\n'
  • sort -z <([...]) <([...]): присоединится и отсортирует вывод [...] и [...];
  • cd dirN; stat -c '%n' * изменит текущий рабочий каталог на dirN и вывод заказанный список имен файлов файлов в нем;
  • uniq -zd: распечатает только дублирующиеся строки;
  • tr '\0' '\n' заменит символы NUL новыми строками.
% tree 
.
├── dir1
│  ├── file1
│  ├── file2
│  └── file3
└── dir2
    └── file1

2 directories, 4 files
% sort -z <(cd dir1; stat --printf '%n\0' *) <(cd dir2; stat --printf '%n\0' *) | uniq -zd | tr '\0' '\n'
file1
2
ответ дан 2 December 2019 в 03:49

Другие вопросы по тегам:

Похожие вопросы: