Удалить текст из имени файла рекурсивно OSX - PullRequest
0 голосов
/ 07 февраля 2020

Мне нужно удалить слово «частичное» из загрузки файлов электронной почты в OS X 10.6.8 рекурсивно вниз через дерево папок. У некоторых есть слово «частичное», у некоторых нет. Я подошел близко к этой терминальной команде

find . -name '*.partial.emlx' -exec sh -c 'mv "$0" "${0%}.emlx"' {} \;

Я говорю близко ..... он добавил все файлы с другим .emlx - но он был рекурсивным и распознал подстановочный знак !!!

Может кто-нибудь помочь изменить мой сценарий? Я не программист, поэтому, пожалуйста, сохраняйте все ответы, пожалуйста c:)

Мне нужно закончить с

mail/foo/3248324.partial.emlx -> mail/foo/3248324.emlx


mail/bar/8757756.partial.emlx -> mail/bar/8757756.emlx


mail/foo/3248325.emlx -> unchanged

Спасибо:)

1 Ответ

0 голосов
/ 11 февраля 2020

Вы можете использовать find для вывода базиса соответствующей команды mv:

$ find mail -name *.partial.emlx -exec echo mv -v \'{}\' \'{}\' \; 
mv -v 'mail/foo/3248324.partial.emlx' 'mail/foo/3248324.partial.emlx'
mv -v 'mail/bar/8757756.partial.emlx' 'mail/bar/8757756.partial.emlx'

Передать sed, чтобы заменить окончательный экземпляр partial.emlx на .emlx:

$ find mail -name *.partial.emlx -exec echo mv -v \'{}\' \'{}\' \; | sed "s/partial\.emlx'$/emlx'/"
mv -v 'mail/foo/3248324.partial.emlx' 'mail/foo/3248324.emlx'
mv -v 'mail/bar/8757756.partial.emlx' 'mail/bar/8757756.emlx'

На этом этапе, если эти команды выглядят вменяемыми, вы можете просто скопировать / вставить их или передать sh, чтобы выполнить их все.

$ find mail -name *.partial.emlx -exec echo mv -v \'{}\' \'{}\' \; | sed "s/partial\.emlx'$/emlx'/" | sh
mail/foo/3248324.partial.emlx -> mail/foo/3248324.emlx
mail/bar/8757756.partial.emlx -> mail/bar/8757756.emlx

Ваши файлы раньше :

$ tree mail
mail
├── bar
│   └── 8757756.partial.emlx
└── foo
    ├── 3248324.partial.emlx
    └── 3248325.emlx

2 directories, 3 files

Ваши файлы после:

$ tree mail
mail
├── bar
│   └── 8757756.emlx
└── foo
    ├── 3248324.emlx
    └── 3248325.emlx

2 directories, 3 files
...