I имеют следующую структуру файла:Bash скрипт для переименования нескольких файлов в подкаталоге с именем папки
Applications/Snowflake/applications/Salford_100/wrongname_120.nui; wrongname_200_d.nui
Applications/Snowflake/applications/Salford_900/wrongname_120.nui; wrongname_200_d.nui
Applications/Snowflake/applications/Salford_122/wrongname_120.nui; wrongname_200_d.nui
И я хочу, чтобы переименовать ФСТЗ тем же именем, как каталоги, в которой они находятся, но файлы с «_d» в конце должны содержать последние два символа. Шаблон файла всегда будет «salford_xxx», где xxx всегда 3 цифры. Таким образом, итоговые файлы будут:
Applications/Snowflake/applications/Salford_100/Salford_100.nui; Salford_100_d.nui
Applications/Snowflake/applications/Salford_900/Salford_900.nui; Salford_900_d.nui
Applications/Snowflake/applications/Salford_122/Salford_122.nui; Salford_122_d.nui
скрипта будет работать из другого места в
Applications/Snowflake/Table-updater
Я полагаю, это потребовало бы для цикла и SED регулярного выражения, но Im открыто для любых предложений. (Спасибо @ghoti за ваш совет) Я пробовал это, которое в настоящее время не учитывает файлы с «_d», но я просто получил один файл, переименованный правильно. Некоторая помощь будет оценена по достоинству.
cd /Applications/snowflake/table-updater/Testing/applications/salford_*
dcomp="$(basename "$(pwd)")"
for file in *; do
ext="${file##*.}"
mv -v "$file" "$dcomp.$ext"
done
Ive Теперь обновленный сценарий следующего @varun совета (спасибо), и теперь он также просматривает все файлы в родительской директории, которые содержат Salford в названии, пропускает имя родителя. Пожалуйста, смотрите ниже
#!/bin/sh
#
# RenameToDirName2.sh
#
set -e
cd /Applications/snowflake/table-updater/Testing/Applications/
find salford* -maxdepth 1 -type d \(! -name . \) -exec sh -c '(cd {} &&
(
dcomp="$(basename "$(pwd)")"
for file in *;
do ext="${file#*.}"
zz=$(echo $file|grep _d)
if [ -z $zz ]
then
mv -v "$file" "$dcomp.$ext"
else
mv -v "$file" "${dcomp}_d.$ext"
fi
done
)
)' ';'
Дело в том, что я просто понял, что в этих Salford подкаталоги существуют и другие файлы с различными расширениями, которые я не хочу переименовывать. Ive пытался ПОДАЧИ еще, если заявление оговорить * .Nui только файлы, назвав мою переменную $ DCOMP, как этот
else
if file in $dcomp/*.nui
then
#continue...
Но я получаю ошибки. Где это должно быть в моем сценарии, а также у меня есть правильный синтаксис для этого цикла? Вы можете помочь?
Таким образом, имя файла фактически является 'wrongname_120.nui; wrongname_200_d.nui', или эти два отдельных файла в одном каталоге? – Will
2 отдельных файла в одном каталоге. Извиняюсь за любую путаницу. – Eggfoot
Что вы пробовали? Большинство из нас здесь очень рады помочь вам научиться совершенствовать свое ремесло, но несколько менее счастливы служить неоплаченными обезьянами кода. – ghoti