2013-02-15 3 views
0

Я пытаюсь использовать fdupes в Mac OSX для удаления дубликатов текстовых файлов из каталога. Он уже удалил кучу дубликатов.Как удалить имя файла из верхней части некоторых текстовых файлов

Проблема, с которой я столкнулся сейчас, заключается в том, что среди оставшихся много дубликатов, за исключением того, что в одном из файлов имя файла является первой строкой, за которой следует пустая строка, за которой следует текст.

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

Пример:

file001.txt:

test 123 
test 

file002.001.txt:

file002.001.txt 

test 123 
test 

Какой самый лучший способ пойти по этому поводу?

+0

Я не эксперт в этой области, но я полагаю, вы могли бы достичь своей цели проще с помощью инструментов командной строки, таких как 'sed',' diff' и т. Д. – ArtM

ответ

2

Возможно, что-то вроде этого

perl -0777 -pi -e 's#\Q$ARGV\E$/{2}##' *.txt 

$ARGV содержит имя файла. $/ - ваш разделитель входных данных - вам может потребоваться использовать \n или любые ваши окончания строк. Так как $/ содержит косую черту, мы меняем разделитель s/// на что-то еще, в данном случае #. Побег \Q ... \E заключается в том, чтобы сделать определенные метасимволы в именах ваших файлов, ничего не закручивая.

Переключатель -0777 делает perl полностью считыванием всего файла, так что мы можем сопоставить несколько строк в одном регулярном выражении.

Переключатель -i будет редактировать на месте. Вы можете добавить суффикс для хранения резервной копии, но это может оказаться неприемлемым при использовании во многих файлах. Однако я не рекомендую использовать переключатель -i, пока вы не уверены, что все идет так, как вам хочется, и просто печатайте на стандартный вывод.

+0

Удивительно, спасибо. Я сделаю это. – Zug

+0

Хорошо, позвольте мне убедиться, что я правильно понял. Если мой разделитель строк \ n, он должен выглядеть так: perl -0777 -pi -e # \ Q $ ARGV \ E \ n {2} ## '* .txt – Zug

+0

@Zug Это правильно. Помните, что изменения необратимы, поэтому попробуйте сначала. – TLP

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