переименование / удаление файла - PullRequest
0 голосов
/ 17 мая 2011

У меня есть несколько таких файлов:

*. Sss и * _passive.sss

Если у меня есть файл с именем blah1.sss и blah1_passive.sss, я хочу избавиться от него.из blah1.sss и переименуйте в blah1_passive.sss.Однако, если у меня нет blah1_passive.sss, я хочу записать имя файла и сохранить blah1.sss.

Я смог найти все файлы * _passive.sss, но мне хотелось бы узнать awk /Команда sed и т.д., которая может переименовать * _passive.sss в * .sss.

Редактировать: Сейчас у меня есть это, но os.rename не перезаписывает файлы, хотя мне нужно перезаписать его.

import os, fnmatch

def locate(pattern, root=os.curdir):

    #ignore directories- uncomment to make ignore work
    #ignored = ["0201", "0306"]
  for path, dirs, files in os.walk(os.path.abspath(root)):
         #for dir in ignored:                  # if dir in dirs:                        #dirs.remove(dir)
    for filename in fnmatch.filter(files, pattern):
       yield os.path.join(path, filename)



for filename in locate("*_passive.sss"):
               #found the files that i want to rename, but os.rename() refuses to overwrite !! 
    newfilename=filename.rstrip("_passive.sss") + ".sss"
    os.rename(filename,newfilename)

Ответы [ 3 ]

5 голосов
/ 17 мая 2011

В Unix вы можете использовать следующую команду в оболочке Bourne (например, sh / bash):

for f in *_passive.sss; do mv -v $f `basename $f _passive.sss`.sss; done
1 голос
/ 17 мая 2011

Вот решение Python:

import os
from glob import glob

# Write out test files.
with open('foo.sss', 'w'):  pass
with open('foo_passive.sss', 'w'):  pass
with open('bar.sss', 'w'):  pass

# Rename files.
files = glob('*.sss')
for filename in files:
  if filename.endswith('_passive.sss'):  continue
  passive_fname = filename.split('.sss')[0] + '_passive.sss'
  if passive_fname in files:
    os.remove(filename)
    os.rename(passive_fname, filename)
  else:
    print 'no passive: ', filename
1 голос
/ 17 мая 2011

Этот сценарий оболочки должен выполнить трюк:

while read f; do
    fp="`echo "$f" | sed -nr 's|(.*)(\.sss)|\1_passive\2| p'`"
    if [ -f "$fp" ]; then mv "$fp" "$f"
    else  echo "file $fp missing" >> missing.log
    fi
done<<<"`ls -1 *.sss | grep -v _passive.sss`"

также сообщит о пропущенных _passive файлах missing.log

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