Список файлов с одинаковыми первыми 16 символами - PullRequest
1 голос
/ 14 августа 2011

Я хочу написать bash-скрипт, который я могу запустить в каталоге и который будет делать следующее:

  • Пройти через все подкаталоги (рекурсивно)
  • Если есть двафайлы в том же заданном подкаталоге , имена файлов которых имеют одинаковые первые 16 символов (например, «YourTestFileNameHey.jpg» и «YourTestFileNameFoo.png»), выводят имена файлов (или перемещают один из них в другое место).

Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

2 голосов
/ 14 августа 2011

Сделайте себе одолжение и используйте что-то еще, кроме bash, для выполнения такой сложной задачи.Моим первым выбором будет Perl, но если вы знаете любой язык программирования общего назначения, он будет проще и удобнее в обслуживании, чем в чистой оболочке.

1 голос
/ 14 августа 2011

Я не знаю, подойдет ли вам эта работа, но вы можете основываться на следующем сценарии:

#!/bin/bash
cd "$1"
for i in *; do j=`echo $i | cut -c 1-16`; echo $1/$i\|$j;done | awk -F\| 'seen[$
2]++ == 1 { printf("echo \"%s\"", $1) | "sh" }'

В нем будут перечислены все вторые файлы, которые имеют те же первые 16 символов, что идругой файл в том же каталоге.Вы можете легко заменить команду echo внутри printf ("echo \"% s \ "", $ 1) командой mv.

Теперь, если вы хотите использовать этот сценарий во всех подкаталогах определенного каталога,давайте назовем это mydir, вы можете сделать это с помощью команды find, как это, при условии, что вы сохранили вышеупомянутый скрипт в файле с именем myscript, который находится в том же каталоге, что и mydir:

find mydir -type d -exec ./myscript {} \;

Помогает ли это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...