2015-10-21 2 views
-2

У меня есть набор файлов во входном каталоге, и мне нужно скопировать только уникальные файлы jar в другой каталог. Пример: в каталоге есть файлы (x. txt, y.txt, z.txt, a.jar, b.jar, c.jar, d.jar, e.jar, f.jar).Unix Command для копирования уникальных файлов из одного каталога в другой каталог

a.jar и b.jar имеют одинаковые данные, а d.jar, e.jar и f.jar имеют одинаковые данные.

Я хочу, чтобы скопировать только a.jar, c.jar и d.jar файлы в выходной каталог Пожалуйста, предложите мне решение

ответ

1

Вы можете попробовать что-то вроде этого:

shasum -a 256 input_dir/*.jar | sort | awk '{if($1!=p)print $2;p=$1}' | 
xargs -I{} cp -vp {} output_dir/ 

input_dir/d.jar -> output_dir/d.jar 
input_dir/c.jar -> output_dir/c.jar 
input_dir/a.jar -> output_dir/a.jar 

Идея - вычислять хэши всех возможных входных файлов, а затем использовать sort и awk, чтобы получить только первый файл, имеющий тот же самый хеш.

sort организует список таким образом, что файлы с тем же хэш будет отображаться постоянно, а команда awk удаляет строки, где хэш совпадает с хэш в предыдущей строке, следовательно, сохраняя только первый файл для каждого заданного хэша.

Обратите внимание, что это может занять много времени, если у вас много файлов или большие.

EDIT: шаблон для соответствия только файлам .jar

+0

Отличный ответ (особенно учитывая, что это ваш первый день). Добро пожаловать в переполнение стека! –

+0

Спасибо @AnthonyGeoghegan – secolive

+0

Спасибо @secolive Сценарий отлично работает для меня. sha1sum input_dir/*. jar | сортировать | awk '{if ($ 1! = p) print $ 2; p = $ 1}' | xargs -I {} cp -vp {} output_dir / –

Смежные вопросы