Shell Geek Byt namn på flera filer på en gång
Låt oss säga att du har en katalog med hundratals filer med fela filnamn, och du vill ersätta alla filnamn som innehåller testa med prod. (detta är ett konstruerat exempel). Vi kan enkelt göra detta med kommandot "för" i bash, kombinerat med lite bash godhet. Idag lär vi oss att ersätta text i en variabel i en för loop.
Kommandot "för" fungerar så här:
för var in; gör $ var; gjort
Du kan ersätta med vilket filmatch som helst, t.ex. * eller * .txt, och du kan ersätta med något Linux-kommando. Kommandot körs i följd på varje fil som matchas av filmatchningsmönstret.
Det är här den bash-variabla hanteringen gör det ännu mer intressant. Istället för att bara göra något som "mv $ var" kan vi ersätta text i filnamnet med den här syntaxen:
$ Var / Original / ReplaceText
Så nu, om vi kör det här kommandot i vår katalog:
för f i *; gör mv $ f $ f / test / prod; gjort
För varje fil som matchas av *, kommer bash att utföra ett kommando som liknar detta:
mv test.config prod.config
Jag har funnit att kunskap om skalet är ovärderligt när du administrerar servrar eller bara för att hantera din filsamling och har sparat mig timmar av vad som annars skulle ha varit manuellt arbete.
Och ja, jag inser att det finns ett antal verktyg som kan åstadkomma byte av flera filer.