Я не знаю, если tcsh
предоставляет более простой способ сделать это, но вот что я обычно делаю:
ls *.abc | sed 's/\(.*\)\.abc/mv "\1.abc" "\1.def"/' | sh
Я также написал скрипт на Python regexmv
, который переименовывает файлы с помощью регулярных выражений. Вот сценарий:
import os
import re
import sys
import os.path
def main(argv):
dry_run = True
if argv[0] == '-f':
dry_run = False
argv = argv[1:]
pattern = argv[0]
repl = argv[1]
files = argv[2:]
max_length = max([len(f) for f in files])
for f in files:
new = re.sub(pattern, repl, f)
if f != new:
if not os.path.exists(new):
print "%s --> %s" % (f.ljust(max_length), new)
if not dry_run:
os.rename(f, new)
if __name__ == '__main__':
main(sys.argv[1:])
Сначала я запускаю его так:
regexmv '\.abc$' '.def' *
чтобы увидеть, какие файлы будут переименованы (и как они будут переименованы), и если это то, что я хочу, я запускаю его так:
regexmv -f '\.abc$' '.def' *