Обработка файлов с пробелом на их имена

Если я понимаю Вас правильно, у Вас есть один диск начальной загрузки/ОС и массив RAID5, который был разделен, и каждый из тех разделов был отформатирован. Вы хотите смонтировать разделы массива как / домой, / var и другие.

Если так, затем:

  1. Если Вы действительно не привязаны к Intel fakeraid, затем преобразовывают в набег программного обеспечения Linux, как предложено psusi. mdadm, действительно намного лучше, чем любой из fakeraid контроллеров (они - просто набег программного обеспечения с BIOS и/или поддержкой драйвера Windows).

    С другой стороны, установите zfsonlinux (предварительно упакованный для человечности) и настройте одну большую шпульку набега-z. zfs приносит Вам всю пользу raid+lvm плюс намного больше без стычек.

  2. Перезагрузка к однопользовательскому режиму (у Вас будут данные в существующем / var, / домой и т.д., который должен быть перемещен в массив. лучше, если это сделано, в то время как замечание еще использует те файлы, и часть его ДОЛЖНА быть сделана, в то время как ничто иное не использует их).

  3. Для каждого из разделов, которые Вы хотите смонтировать:

    3.1 форматируют партон, если он уже не отформатирован.

    3.2 монтируют раздел как XXXX.new, где XXXX название подкаталога, Вы хотите переместиться в массив. например, var.new, home.new - необходимо будет сделать каталог, если он не будет уже существовать.

    например.

    mkdir /var.new
    mount /dev/dm-1 /var.new

    3.3 rsync исходный каталог к недавно смонтированному каталогу, например. rsync -avx var var.new

    3.4 перемещают старый каталог из пути и перемещают новый каталог в место. например.

    mv var var.old ; mkdir /var

    Если Вы хотите видеть то, на что конечное состояние будет похоже перед перезагрузкой то можно повторно смонтировать раздел. например.

    umount /var.new ; mount /dev/dm-1 /var ; rmdir var.new

    3,5 редактирования/etc/fstab и добавляют новую точку монтирования. например, если / домой будет/dev/dm-0, и / var/dev/dm-1, и оба отформатированы как ext4 затем, то Вы захотите добавить строки как это к/etc/fstab:

    /dev/dm-0   /home  ext4  defaults     0       2
    /dev/dm-1   /var   ext4  defaults     0       2

    (можно хотеть другие опции монтирования как в реальном времени или nodiratime после "значений по умолчанию"),

  4. В конце концов, это сделало Вас, может перезагрузить, и можно удалить *.old каталоги на досуге. то же для любых (пустых) *.new каталогов, если Вы не удалили их на шаге 3.4.

При использовании zfs затем, процедура будет немного отличаться. Вы не должны будете форматировать или монтировать разделы (просто zfs create poolname/XXXX.new в течение каждой фс Вам нужно), и Вы, привычка должна отредактировать/etc/fstab (просто изменяют свойство точки монтирования в течение каждой фс, например. zfs set mountpoint=/var poolname/var.new)

BTW, в случае, если Вы не знаете: некоторые каталоги MUST быть в корневой файловой системе. / мусорное ведро,/sbin, и / и т.д. большинство современных дистрибутивов Linux не справляется хорошо с/usr, находящимся на отдельной фс также.

0
10.02.2014, 01:29
2 ответа

Некоторые реализации grep управляйте как GNU grep может рекурсивно вызвать каталоги самостоятельно. При поиске строки "чепуха", можно сделать это:

$ grep -r "blahblah" .

Это будет grep через все файлы и каталоги, рекурсивно запускающиеся в текущем каталоге, . (остерегайтесь этого некоторые реализации, как старые версии GNU grep также перейдет по символьным ссылкам при убывании дерева каталогов). Это покажет Вам имена файлов и результат, который соответствовал шаблону поиска, один на строку. Если Вы просто хотите имена файлов без контента соответствия, добавляют -l переключатель к grep.

$ grep -rl "blahblah" .

Если Вы действительно хотите использовать find можно использовать findспособность выполнить команды против файлов, которые это находит, с помощью -exec переключатель.

$ find . -type f -exec grep "blahblah" {} +

+ в конце является ключевым, так как он определит оптимальное количество имен файлов это find располагается, и вызов grep загрузка командной строки со столько, сколько будет соответствовать. Эти имена файлов будут помещены, где фигурные скобки, {}. Легче визуализировать то, что это делает, если мы занимаем место в echo команда в grepместо Вы будете, надо надеяться, видеть то, что я имею в виду.

Пример

Скажите, что у меня были следующие демонстрационные данные.

$ mkdir -p dir{1..3}
$ touch file{1..3}
$ touch dir{1..3}/file{A..C}

Теперь, когда я выполняю вышеупомянутое find использование команды echo как наш grep помогите:

$ find . -type f -exec echo {} +
./file2 ./file1 ./dir2/fileA ./dir2/fileB ./dir2/fileC ./dir3/fileA ./dir3/fileB ./dir3/fileC ./file3 ./dir1/fileA ./dir1/fileB ./dir1/fileC

Все те файлы были отражены на экран синглом echo таким образом, этот способ очень эффективен только при вызове echo или grep только минимальное количество раз, которые необходимы, передавая столько имен файлов, сколько оно может каждому.

При помощи -type f выше, мы только ищем в регулярных файлах, в то время как grep обычно смотрел бы в каждом файле как fifos, сокеты, устройства (но не обязательно символьные ссылки)... Можно передать a -D skip опция к некоторым версиям grep постараться не изучать devices/sockets/fifos.

3
28.01.2020, 02:28
  • 1
    , я сделал редактирование. Я должен был быть более конкретным, извините. –  user2840647 09.02.2014, 08:00
  • 2
    @user2840647 - все мои ответы держат через содержание файла, не имена! –  slm♦ 09.02.2014, 08:08
find . -type f -print0 | xargs -0 grep yourstring

-print0 опция найти, а также -0 кулон к xargs, используйте пустой байт в качестве разделителя, означающего, что Ваши имена файлов могут быть чем-либо, что Вы любите и не будет никаких неожиданностей.

Фактическая проблема состоит в том, что внутренний разделитель файлов оболочки (сохраненный в переменной IFS) является пространством. Вы могли изменить его, чтобы быть новой строкой или независимо от того, что Вам нравится, но действительное решение состоит в том, чтобы использовать то, что я показал выше.

0
28.01.2020, 02:28

Теги

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