фильтр в "find" игнорируется при выводе в tar

Существует расширение Chrome с именем Surfingkeys , которое включает редактор ACE vim (редактор vim, реализованный с помощью Javascript ).

С расширением вы можете нажать Ctrl-i , чтобы вызвать редактор vim, когда вы находитесь в элементе ввода input или textarea . Затем вы можете редактировать текст с помощью редактора vim и : wq , чтобы записать текст в редакторе vim обратно в элемент на странице.

Вы также можете использовать редактор vim для выбора опции для элемента select , что полезно, когда в элементе select есть множество опций.

Дополнительную информацию можно найти - редактор vim с ACE . edit input element

edit select element

6
09.04.2017, 16:28
2 ответа

В развитие слов @cuonglm, tar по умолчанию работает рекурсивно. Если вы передадите ему имя каталога, он заархивирует содержимое этого каталога.

Вы можете изменить команду find, чтобы она возвращала только имена файлов, а не каталогов...

find test/ -type f -not -path "*1*" -not -path "*2*" |
tar -czvf test.tar.gz --files-from -

Вместо этого вы можете использовать флаг --no-recursion в tar:

find test/ -not -path "*1*" -not -path "*2*" | 
tar -czvf test.tar.gz --no-recursion --files-from - 

Что приводит к:

test/
test/3/

Флаг --no-recursion специфичен для GNU tar. Если вы используете что-то другое, обратитесь к соответствующей man-странице, чтобы узнать, есть ли там подобная функция.

Обратите внимание, что команда find будет исключать файлы, содержащие 1 или 2 в пути, а также каталоги.

11
27.01.2020, 20:21

С GNU tar вы также можете использовать опцию --exclude, чтобы исключить файлы на основе имен.

$ tar --exclude "*1*" --exclude "*2*" -cvf foo.tar  test/
test/
test/3/

Существует также -X или --exclude-from, который берет файл, из которого считываются шаблоны исключения.


Несмотря на то, что find -not -path "*1*", это также исключает файлы, имена которых содержат 1 или 2. Чтобы пропустить только каталоги, имена которых соответствуют шаблону, используйте find -prune и tar --no-recursion:

$ touch test/3/blah.1
$ find test/ -type d \( -name "*1*" -o -name "*2*" \) -prune -o -print |
   tar cvf test.tar --files-from - --no-recursion
test/
test/3/
test/3/blah.1

(как минимум GNU tar и FreeBSD tar есть -- без рекурсии )

6
27.01.2020, 20:21

Теги

Похожие вопросы