Как удалить (1) из имен файлов с помощью команды находки

Я собираюсь принять Ваш оба подключенные к Той же сети или Wi-Fi или Кабелем, я предложил бы ettercap, использовать человека отравления ARP в среднем нападении, которое в основном отправит весь сетевой трафик Вам включая беспроводную связь и затем на предполагаемом получателе, в ettercap Вы видите фактический tcp поток на экране, это имеет много плагинов, и можно создать собственное, я считаю, что это не к трудному к, затем исправляют правило изменить пакетную полезную нагрузку, однако поток, это сам может быть зашифровано и в той точке, можно застрять, поскольку это будет просто похоже на ерунду, Вы говорите, что это находится в простом тексте, таким образом, я предполагаю, что Вы уже должны сниффингового пакеты,

Я раньше использовал отслеживание в обратном порядке вполне в большой степени пара несколько лет назад для взламывания Wi-Fi, и я знаю, что ettercap идет там, я сделан некоторые видео на YouTube, показывающем, как использовать его для человека в средних нападениях, учетную запись называют поднятой битом или bitjacked, который я проверил бы, но я говорю по телефону, они могут помочь Вам с первой частью.

13
16.05.2012, 10:49
5 ответов

Не пытайтесь проанализировать find вывод за исключением последнего средства. Важно понять, что в файловых системах Unix, имена файлов не являются строками (распространенное заблуждение), а скорее двоичные блобы, которые могут содержать любой символ кроме / и нулевой символ. Парсинг имен файлов безопасно и правильно является действительно болью, что 99% времени, Вы просто захотите постараться не делать его в целом (просто выглядят на как волосатым sed выражение в ответе @yarek и даже который не покрывает все случаи). К счастью в этом случае существует намного более простой подход:

find . -name '*(1).m4a' -execdir sh -c \
'for arg; do mv "$arg" "${arg%(1).m4a}".m4a; done' _ {} \+
13
27.01.2020, 19:52
  • 1
    аккуратный подход, все же столь же волосатый как sed выражение :) +1 –  yrk 12.05.2012, 00:18
  • 2
    , который что-то пропускает здесь..., где done? –  yrk 12.05.2012, 00:27
  • 3
    @yarek спасибо за выгоду. Самое большое различие между этим и sed подход канала, это намного более безопасно. Еще легче читать, чем regex суп обратной косой черты, если Вы понимаете некоторые основные конструкции сценариев оболочки. –  jw013 12.05.2012, 02:23
  • 4
    Вы правы; это намного более чисто. И $arg переменная делает намного легче читать. –  hobbes3 12.05.2012, 05:17
  • 5
    @DQdlM отрывок, который я отправил выше, справедлив find вызов sh с довольно портативным синтаксисом POSIX. Для получения дополнительной информации можно проверить раздел по Расширению Параметра, раздел по составным командам, который объясняет for цикл и POSIX find спецификация. В дополнение к тем ресурсам я был бы рад ответить на любые конкретные вопросы, которые Вы имеете. –  jw013 13.05.2012, 00:46

На Debian и Ubuntu, я могу использовать rename 's/\(1\)//' *.m4a решить Вашу проблему.

6
27.01.2020, 19:52
  • 1
    Странный, я могу сделать man rename, но я на самом деле не имею rename: -bash: rename: command not found (which rename ничего не показывает). –  hobbes3 11.05.2012, 22:10
  • 2
    @hobbes3 на Mac здесь man -a rename находит переименовывают (2) - syscall и переименовывают (n) - команда TCL. Нет ни не переименовывают (1), ни сама утилита там. –  yrk 11.05.2012, 22:18
  • 3
    @hobbes3 на Mac здесь man -a rename находит переименовывают (2) - syscall и переименовывают (n) - команда TCL. Нет ни не переименовывают (1), ни сама утилита там. –  yrk 11.05.2012, 22:18
  • 4
    IIRC, rename сценарий жемчуга, включенный с примерами, включенными в некоторые установки жемчуга, и пара дистрибутивов включает его в путь, потому что это - удобная команда. (@Hobbes, возможно, можно найти его в Интернете), –  Kevin 12.05.2012, 01:47
  • 5
    IIRC, rename сценарий жемчуга, включенный с примерами, включенными в некоторые установки жемчуга, и пара дистрибутивов включает его в путь, потому что это - удобная команда. (@Hobbes, возможно, можно найти его в Интернете), –  Kevin 12.05.2012, 01:47
  • 6
    @Kevin в моей системе rename нормальный двоичный файл (не жемчуг). Однако другой протест состоит в том что не все версии rename поддержка regexes. Версия, которую я имею, например, только, позволяет, Вы действительно направляете строковые замены, например, rename '(1)' '' *.m4a –  Patrick 12.05.2012, 02:13
  • 7
    @Kevin в моей системе rename нормальный двоичный файл (не жемчуг). Однако другой протест состоит в том что не все версии rename поддержка regexes. Версия, которую я имею, например, только, позволяет, Вы действительно направляете строковые замены, например, rename '(1)' '' *.m4a –  Patrick 12.05.2012, 02:13
  • 8
    Perl rename сценарий только установлен Debian и производными. Другие системы Linux имеют другое rename утилита (показанный Patrick). OSX не имеет ни одного. –  Gilles 'SO- stop being evil' 12.05.2012, 02:30
  • 9
    Perl rename сценарий только установлен Debian и производными. Другие системы Linux имеют другое rename утилита (показанный Patrick). OSX не имеет ни одного. –  Gilles 'SO- stop being evil' 12.05.2012, 02:30

В zsh, с помощью zmv:

autoload zmv      # you can put this line in your .zshrc
zmv '(*)\(1\)(*)' '$1$2'

Во втором аргументе (новое имя), $1 и $2 обратитесь к заключенным в скобки группам (PATTERN) в исходном шаблоне. Другой способ записать это переименование

zmv '(*)' '${1/\(1\)/}'
4
27.01.2020, 19:52

Следующий подход дает Вам способность предварительно просмотреть/сократить сгенерированные команды прежде, чем выполнить их, и это очень портативно: это должно работать не только над Mac, не только с ударом, и не только с GNU sed; даже в системах без find(1) команда возможно заменить им с du(1) без проблемы.

find . -name '*(1).m4a' |
sed 's/\(.*\)(1).m4a$/mv & \1.m4a/' 

Если счастливый печатными командами, повторно выполненными с | sh -x добавленный.

Если затронуто пробелами в именах файлов, добавьте другой s для выхода из всех пробелов:

find . -name '*(1).m4a' |
sed -e 's/ /\\ /g' -e 's/\(.*\)(1).m4a$/mv & \1.m4a/'

Если другие специальные символы ожидаются, это получает небольшой более хитрый бит:

find . -name '*(1).m4a' |
sed -e "s/'/'\\\\''/g" -e 's/\(.*\)(1).m4a$/mv '\''&'\'' '\''\1.m4a'\'/

Первая функция преобразовывает все ' в форму, таким образом, что они взяты буквально когда посреди '...'- завершенная строка. Вторая функция генерирует команды mv, в аргументах которых включают '...'.

3
27.01.2020, 19:52
  • 1
    Та команда не выходит из имени файла (пробелы, (, и все другие специальные символы) или добавляющие кавычки вокруг имени файла. Я пытался изменить Вашу команду, но я не мог выяснить, как добавить кавычки вокруг обоих имен файлов для mv команда. Один из получающегося вывода от Вашей команды mv ./The Beatles - Let It Be (MFSL LP 1-109) 24-96 Vinyl Rip/01 Two Of Us(1).m4a ./The Beatles - Let It Be (MFSL LP 1-109) 24-96 Vinyl Rip/01 Two Of Us.m4a. И если я выполняю ту команду, я добираюсь -bash: syntax error near unexpected token '('. –  hobbes3 11.05.2012, 22:23
  • 2
    Та команда не выходит из имени файла (пробелы, (, и все другие специальные символы) или добавляющие кавычки вокруг имени файла. Я пытался изменить Вашу команду, но я не мог выяснить, как добавить кавычки вокруг обоих имен файлов для mv команда. Один из получающегося вывода от Вашей команды mv ./The Beatles - Let It Be (MFSL LP 1-109) 24-96 Vinyl Rip/01 Two Of Us(1).m4a ./The Beatles - Let It Be (MFSL LP 1-109) 24-96 Vinyl Rip/01 Two Of Us.m4a. И если я выполняю ту команду, я добираюсь -bash: syntax error near unexpected token '('. –  hobbes3 11.05.2012, 22:23
  • 3
    это, как предполагается, домашняя работа :) но хорошо, я обновлю ответ –  yrk 11.05.2012, 22:26
  • 4
    Путем GNU sed может выполниться, управляют собой путем добавления e команда после замены. Например, find . -name '*(1).m4a' | sed 's/\(.*\)(1).m4a$/mv & \1.m4a/e' будет команда exexcute, не передавая по каналу к sh -x. –  rush 11.05.2012, 23:39
  • 5
    @Rush это - единственный sed, который делает это; и это должно запустить оболочку так или иначе, но новый для каждой команды (напоминает проблеме make, не так ли?) –  yrk 11.05.2012, 23:46
  • 6
    я не думаю, что мы должны быть downvoting. Это - допустимое решение, в конце концов. –  hobbes3 12.05.2012, 05:17

Вот маленький сценарий, который делает это:

for var in `find . -type f -name "*(1).m4a"`; do
    new=`echo $var | cut -d'(' -f1`;
    mv $var $new.m4a;
done
1
27.01.2020, 19:52
  • 1
    этот будет дросселировать на файлах с пробелами на их имена; также это требует достаточно большого временного хранения для `find ...` –  yrk 22.05.2012, 19:31

Теги

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