Капитал W не происходит в конце слова также, но он может произойти в сокращении всех заглавных букв. Таким образом, я заменил бы W
когда это сразу после строчной буквы, или когда это следует за прописной буквой и предшествует строчной букве (aWre).
sed -e 's/\([[:lower:]]\)W/\1fi/g' -e 's/\([[:alpha:]]\)W\([[:lower:]]\)/\1fi\2/g'
Это не покрывает fifi
(который мой самый большой список слов только находит им в “fifing”). Что еще более важно, это не покрывает W
в начале слова; можно получить некоторые случаи путем рассмотрения второй буквы, но это все еще собирается пропустить много слов, которые начинаются fi
. На английском языке много букв никогда не появляются после W:
… -e 's/\([^[:alnum:]]\)W\([b-dfgj-npqstv-xz]\)/\1fi\2/g' \
-e 's/^W\([b-dfgj-npqstv-xz]\)/fi\2/'
Для более точных результатов и справляться с другими языками, можно переключиться на более сложный основанный на словаре подход (которым кажется, что Системы оптического распознавания часто используют, очевидно Ваш не достаточно необычен).
Используйте файловую систему FUSE, которая позволяет Вам просматривать архивы как каталоги, такие как AVFS. Использовать cp
извлечь файлы к каталогу по Вашему выбору.
mountavfs
cp -Rp ~/.avfs/tmp/omeka-1.5.1.zip\#/omeka-1.5.1 omeka
Так как мы предполагаем, что существует единственный каталог верхнего уровня в архиве, можно сократить это к
cp -Rp ~/.avfs/tmp/omeka-1.5.1.zip\#/* omeka
Если Ваш zip-файл не содержит структуры каталогов, или Вы не должны сохранять его, можно использовать это:
cd /tmp
wget http://omeka.org/files/omeka-1.5.1.zip
unzip -j omeka-1.5.1.zip -d omeka
cd omeka
ll
Он просто проверяет, есть ли ровно один подкаталог, и если да, то перемещает из него все вверх, а затем удаляет его.[116636].
patch --strip=n
Желательно иметь опцию типа patch --strip=number
(или -pnumber
), которая сокращает number
компоненты пути в начале (см. Сравнение и слияние файлов: патчи каталогов).
Если этого не произошло, есть еще одно решение, немного хакерское, но работающее. В моем случае я хотел перезаписать каталог, полный существующих файлов, содержимым zip, не распаковывая сначала полный zip.
Когда это решение будет работать и будет доступно решение @Gilles, последнее тоже будет работать. Тем не менее, это решение не требует наличия файловой системы FUSE.
Предполагая, что вы знаете дополнительный каталог, в вашем случае omeka-1.5.1
, вы можете сделать следующее:
mkdir omeka
ln -s . omeka/omeka-1.5.1 # create a symlink that redirects output
unzip omeka-1.5.1.zip -d omeka/
rm omeka/omeka-1.5.1 # remote symlink
unzip
попытается разархивировать в omeka-1.5.1
, который на самом деле является симлинком на содержащий dir. В результате файлы попадут непосредственно в omeka
.
Вы можете придумать варианты для перенаправления одной или нескольких частей иерархии depeer.
ln -s ../myfoo omeka/omeka-1.5.1/foo
ln -s ../../mybarxyzzy omeka/omeka-1.5.1/subdir/bar
Это решение несколько специфично, однако оно имеет свои сценарии использования, и я просто случайно использовал его.
Скорее всего, вы захотите запустить unzip
с параметром -j
, например:
unzip -j files.zip -d ./output/
Но вы можете быть удивлены его поведением:
-j junk paths . Структура каталогов архива не воссоздается; все файлы помещаются в каталог извлечения (по по умолчанию, текущий).
Если вы извлечете files.zip
в выходной каталог ./ output
и получите в результате:
./output/files/subfolder1/f1
./output/files/subfolder1/f2
, то параметр -j
будет дать вам это (все пути отмечены полосами):
./output/f1
./output/f2
unzip
имел некоторое волшебство сделать это, такое как определение файлов, которые будут извлечены как*/*
, то, что я мог использовать, не устанавливая другую утилиту, но я предполагаю нет.Спасибо. +1 – cwd 09.05.2012, 05:05