Как найти и удалить «Неизвестный» из имени файла только для файлов .csv и .pdf - PullRequest
0 голосов
/ 04 мая 2020

Ubuntu 18.04. У меня есть верхняя папка с тысячами папок и файлов ниже, многоуровневая. У многих файлов в заголовке есть «Неизвестно», которые я хотел бы удалить без необходимости делать это вручную.

StJamesRow.2010.Unknown.pdf> StJamesRow.2010.pdf

StJamesRow. 2010.Unknown.csv> StJamesRow.2010.csv

MarbleArch.2015.Unknown.pdf> MarbleArch.2015.pdf

MarbleArch.2015.Unknown.csv> MarbleArch.2015.csv

Я хотел бы запустить команду на верхнем уровне и сделать так, чтобы она возвращалась вниз. Он не должен удалять «Неизвестный» из имени папки, если он находит неизвестное в заголовке папки. Он должен быть удален только для файлов CSV и PDF. Было бы здорово, если бы я мог dry -запустить его сначала с журналом изменений, прежде чем идти в него головой.

Спасибо за чтение

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Попробуйте этот один вкладыш:

find . -type f -name "*Unknown*" | rename 's/(.*).Unknown(.*)(csv|pdf)/$1$2$3/' 

, который может удалить '.Unknown' из любой позиции, кроме первой и последней, или этот:

find . -type f -name "*Unknown*" | rename 's/(.*)Unknown.(csv|pdf)/$1$2/'

, если '.Unknown' должны быть удалены из позиции непосредственно перед расширением pdf или csv

EDIT:

Если вам нужна версия dry -run, вы можете использовать sed и стандартный вывод вместо rename:

find . -type f -name "*Unknown*" | sed 's/\(.*\)Unknown.\(csv\|pdf\)/\1Unknown.\2 -> \1\2/'

, который дает вывод:

./StJamesRow.2010.Unknown.csv -> ./StJamesRow.2010.csv
./MarbleArch.2015.Unknown.pdf -> ./MarbleArch.2015.pdf
0 голосов
/ 04 мая 2020

Оболочка может выполнять некоторую классную обработку строк, например отрубать подстроки с любого конца строки:

find . -name '*Unknown.pdf' |
while read file; do
    mv "$file" "${file%.Unknown.pdf}.pdf"
done

Для прогона dry сделайте его echo mv ....

Прочтите все об этих функциях%, %%, # и ## chop в разделе руководства по вашей оболочке расширение параметра .

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