Скрипт добавляет md5sum для дублирования имен файлов, но по-прежнему получает уведомления об ошибках при выполнении

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

Решение моей проблемы заключалась в том, чтобы разбить файл с GREP в качестве предварительно процессора. Посмотрите на ваши данные, чтобы увидеть, где будут комки. Я предполагаю, что это прилично распространяется над буквенно-цифровым пространством, но я буду обсуждать, как бороться с комками позже.

for char1 in other {0..9} {a..z}; do
  out="/tmp/sort.$char1"
  echo "Extracting lines starting with '$char1'"
  if [ "$char1" = "other" ]; then char1='[^a-z0-9]'; fi
  grep -i "^$char1" *.txt > "$out"
  sort -u "$out" >> output.txt || break
done

(Это использует басизм. Чтобы избежать его, явное назвать каждый из 37 символов, как для Char1 в другом 0 1 2 3 4 5 6 7 8 9 0 ABCDEF ... )

Clumps: Полностью возможно, что некоторые из этих петлей сортировка вызовы, будут вызовываться из-за иметь слишком много данных. Просто пересматривайте, что итерация, чтобы быть более разбитым на части. Это может быть так же просто, как удаление флага GreeP -I и вызов каждой заглавной буквы (не забудьте изменить другой на [^ a-za-z0- 9] ) или может потребовать копаться в данные. Если это список пакетов программного обеспечения, у вас может быть слишком много строк, начнут с «lib», и поэтому /tmp/sort.l итерация не удастся. || Break Часть этого цикла прекратит обработку в этой точке, чтобы вы могли ее исправить и резюме, где вы остановились. После примера «lib» вы можете возобновить с чем-то вроде этого:

for char1 in 'l[a-h]' 'lia' lib{a..z} lib{0..9} 'li[c-z]' 'l[j-z]' {m..z}; do
  ...

Это разбивает список L в детали до и после части lib *. Это немного уродливо, но это должно работать. Просто обратите внимание на желаемый заказ, чтобы вы могли сохранить его.

0
13.10.2015, 13:12
1 ответ

Насколько я понимаю, есть проблема с fdupes команда, которая выводит пустую строку в конце:

[PRD][]localhost:~ 12:17:09     
$ fdupes -r work/
work/sockperf-sockperf_v2/news          
work/sockperf-sockperf_v2/src/.dirstamp
work/sockperf-sockperf_v2/src/.deps/.dirstamp

[PRD][]localhost:~ 12:17:19

Затем при обработке в цикле последний элемент остается пустым, что вызывает ошибку в md5sum , как когда файл не существует:

$ md5sum ' ' 
md5sum: : no such file of directory 

И затем сценарий пытается переместить этот пустой файл имен, что также приводит к ошибке mv .

0
28.01.2020, 04:54

Теги

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