Переименование части имени файла [дубликат]

Если Ваше использование не повысилось много, кажется маловероятным, что существует только отставание в работе. IMO, наиболее вероятная опция состоит в том, что что-то использует соединения и не выпускает их быстро. Вы уверены , Вы используете using во всех случаях? Или (через любой механизм) выпуск соединений?

83
задан Benjamin W. 21 August 2018 в 15:30
поделиться

5 ответов

Есть несколько вариантов команды переименования, в вашем случае она может быть такой же простой, как

rename ABC XYZ *.dat

У вас может быть версия, которая принимает регулярное выражение Perl;

rename 's/ABC/XYZ/' *.dat
157
ответ дан 24 November 2019 в 08:41
поделиться

Что-то вроде этого подойдет. Цикл for , возможно, потребуется изменить в зависимости от того, какие имена файлов вы хотите захватить.

for fspec1 in DET01-ABC-5_50-*.dat ; do
    fspec2=$(echo ${fspec1} | sed 's/-ABC-/-XYZ-/')
    mv ${fspec1} ${fspec2}
done

Вы всегда должны тестировать эти сценарии на копиях ваших данных, кстати, и в совершенно разные каталоги.

7
ответ дан 24 November 2019 в 08:41
поделиться

Мне нравится делать это с помощью sed. В вашем случае:

for x in DET01-*.dat; do
    echo $x | sed -r 's/DET01-ABC-(.+)\.dat/mv -v "\0" "DET01-XYZ-\1.dat"/'
done | sh -e

Лучше сначала опустить часть «sh -e», чтобы увидеть, что будет выполнено.

1
ответ дан 24 November 2019 в 08:41
поделиться

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

if [[-n $ inInteractiveMode]]
затем
echo -e -n "$ oldFileName => $ newFileName \ nВы хотите внести это изменение? [Y / n]:"
читать run

[[-z $ run || "$ run" == "y" || "$ run" == "Y"]] && mv "$ oldFileName" "$ newFileName"
fi

Или сделайте интерактивный режим по умолчанию и добавьте флаг форсирования (-f | --force) для автоматических скриптов или, если вам хочется. И это не слишком замедляет вас: ответ по умолчанию - «да, я действительно хочу переименовать», поэтому вы можете просто нажимать клавишу ввода в каждом запросе (из-за `` -z $ run \ тест.

1
ответ дан 24 November 2019 в 08:41
поделиться

Вам нужно научиться использовать sed http://unixhelp.ed.ac.uk/CGI/man-cgi?sed

А также использовать для так что вы можете перебирать записи в файлах http://www.cyberciti.biz/faq/bash-for-loop/

Ваша команда будет выглядеть примерно так, у меня нет термина рядом со мной, поэтому Я не могу проверить

for i in `dir` do mv $i `echo $i | sed '/orig/new/g'`
4
ответ дан 24 November 2019 в 08:41
поделиться
Другие вопросы по тегам:

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