Я пытаюсь узнать, какие файлы присутствуют в двух сравненных папках. Я только интересуюсь сравнением имен файлов.
Добавление-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
.
.
.
Какие-либо предложения?
Я только интересуюсь сравнением имен файлов.
Затем избегайте любого инструмента, который сравнит содержание файлов, поскольку это просто замедлит процесс.
Что происходит со мной прямо сейчас для сравнения имен файлов в этих двух каталогах, и производить только общие:
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