Используя Ctrl+r
можно искать историю:
pbm@tauri ~ $
(reverse-i-search)`xran': xrandr -o normal
Любая команда, которую Вы находите, могла быть отредактирована...
Я думаю, что нашел точно, в чем Вы нуждаетесь: выполненный shopt -s histverify
и в следующий раз, когда Вы хотите использовать !n
команда не будет выполняться, но только помещаться в командную строку...
Как camh указывает, предыдущая команда имела небольшую проблему в том, учитывая слишком много имен файлов, это выполнится несколько раз с более поздними вызовами, тихо вытирающими предыдущие выполнения. Так как мы не сжимаемся также, мы можем добавить вместо перезаписи:
find mydir -maxdepth 1 -type f -print0 | xargs -0 tar Avf mydir.tar
find mydir -maxdepth 1 -type f -exec tar Avf mydir.tar {} +
Ответ Iocnarz использования tar
--null
и -T
опции работают также. Если Вы имеете cpio
установленный, ответ camh с помощью этого прекрасно также. И если Вы имеете zsh
и не возражайте использовать его для команды, ответ Gilles с помощью zsh шарика (*(.)
) кажется самым простым.
Ключ был -maxdepth
опция. Окончательный ответ, имея дело с пробелами соответственно:
find mydir -maxdepth 1 -type f -print0 | xargs -0 tar cvf mydir.tar
Это должно также работать:
find mydir -maxdepth 1 -type f -exec tar cvf mydir.tar {} +
Я не уверен, что понимаю Ваши требования. Если Вы хотите хранить регулярные файлы в mydir
но не его подкаталоги, самый легкий путь состоит в том, чтобы использовать zsh, где соответствие регулярным файлам только является простым вопросом использования .
спецификатор шарика:
tar cf mydir.tar mydir/*(.)
Как вводный абзац в man tar
говорит (последнее предложение),
Использование имени каталога всегда подразумевает, что подкаталоги ниже должны быть включены в архив.
Который я понимаю как ответ "нет" на Ваш вопрос.
--no-recursion
, --exclude-tag
, и т.д.). Я изучаю --exclude-tag
который выглядит многообещающим, но, кажется, полная противоположность того, что я ищу.
– ateiob
18.11.2011, 17:21
Можно даже использовать find ... -print0
и tar ... --null
непосредственно без использования xargs
вообще.
find . -maxdepth 1 -type f -print0 | tar cvf mydir.tar --null -T -
В данном примере, --no-recursion
опция к tar
не необходимо, потому что только пути файлов (и не каталоги) будут переданы от find
кому: tar
.
Используя --no-recursion
опция к tar
в следующем примере, однако, предотвращает tar
из двойных каталогов архивации. find
сделает рекурсию дерева каталогов вместо tar
затем.
# compare
find . -print0 | tar cf mydir.tar --null -T -
tar -tf mydir.tar | nl
find . -print0 | tar cf mydir.tar --null --no-recursion -T -
tar -tf mydir.tar | nl
Когда Вы хотите использовать find
с tar
, лучший способ состоит в том, чтобы использовать cpio
вместо tar
. cpio
может записать архивы tar и разработан для взятия списка файлов для архивации от stdin.
find mydir -maxdepth 1 -type f -print0 | cpio -o -H ustar -0 > mydir.tar
Используя find
и cpio
больше подхода unix-y, в котором Вы позволяете find
сделайте выбор файла со всей силой, которую он имеет, и позволить cpio
сделайте архивацию. Стоит изучить это простое использование cpio
, поскольку Вам легко решить проблемы, Вы ударяете Вашим вперед о при попытке tar
.
star -c -C startdir -find . ! -type d > out.tar
Опустите -C startdir
и замените .
с startdir
, если он должен появиться в архиве.
Это наиболее эффективный метод, основанный на возможностях libfind. Libfind также предлагает основные параметры -chown
-chgrp
-chmod
, которые изменяют структуру stat на месте и позволяют архивировать различные метаданные. Это также работает в режимах списка и извлечения и во многих случаях избавляет от необходимости извлекать весь архив.
Я мог бы найти решение.
find mydir -type f -printf '% P \ 0' | tar czvf mydir.tar.gz -C mydir --null -T -
Это может быть немного дорого, но в любом случае это сработает, потому что это не зависит от xargs.
tar
. Обаxargs
иfind
с+
вариант имеет максимальное количество аргументов, которые могут быть переданы tar. Это приведет к второму вызову tar, перезаписывающего вывод первого. – camh 07.04.2012, 01:30-x
вынудить xargs перестать работать вместо того, чтобы терять данные, и в то время как лучше, чем тихая ошибка данных потерь, это все еще не идеально. Эта ошибка вида так опасна, потому что все кажется OK сначала, но поскольку список файлов растет со временем, Вы начинаете инициировать его и не можете заметить, пока Вы не пытаетесь восстановить свое резервное копирование. Затем слишком поздно. – camh 07.04.2012, 01:49