Как выполнить команду для каждой папки в каталоге?

128 разделов — ограничение по умолчанию для GPT, и на практике, вероятно, неудобно использовать половину этого количества...

Сам Linux изначально также имел некоторые ограничения в пространстве имен устройств. Для /dev/sdX предполагается не более 15 разделов (sda — 8,0, sdb — 8,16 и т. д. ). Если разделов больше, они будут представлены с использованием 259,X, также известного как Block Extended Major.

Конечно, вы можете сделать больше разделов различными способами. Устройства Loop, LVM или даже GPT внутри GPT. Иногда это происходит естественным образом при передаче разделов в качестве блочных устройств виртуальным машинам, они видят раздел как виртуальный диск и разбивают его.

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


Как заметил @fpmurphy1 в комментариях, я ошибался. :Вы можете изменить ограничение, используя gdisk, expert menu, resize partition table. Это также можно сделать для существующих таблиц разделов, при условии, что в начале и в конце диска имеется нераспределенное пространство (и сектор размером 512 -байт для 4 дополнительных записей раздела ). Однако я не уверен, насколько широко это поддерживается; в partedили других разделителях, которые я пробовал, похоже, нет такой возможности.


И самый высокий предел, который вы можете установить с помощью gdisk, кажется, 65536, но он прослушивается:

Expert command (? for help): s   
Current partition table size is 128.
Enter new size (4 up, default 128): 65536
Value out of range

А потом...

Expert command (? for help): s   
Current partition table size is 128.
Enter new size (4 up, default 128): 65535
Adjusting GPT size from 65535 to 65536 to fill the sector

Expert command (? for help): s
Current partition table size is 65536.

Эээ? Что бы вы ни сказали.

Но попробуйте сохранить эту таблицу разделов, и gdiskзастрянет в цикле на несколько минут.

Expert command (? for help): w

--- gdisk gets stuck here ---
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND    
    22253 root      20   0   24004  11932   3680 R 100.0  0.1   1:03.47 gdisk      
--- unstuck several minutes later ---

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Your option? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/loop0.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.

А вот что partedговорит об успешно завершившейся операции:

# parted /dev/loop0 print free
Backtrace has 8 calls on stack:
  8: /usr/lib64/libparted.so.2(ped_assert+0x45) [0x7f7e780181f5]
  7: /usr/lib64/libparted.so.2(+0x24d5e) [0x7f7e7802fd5e]
  6: /usr/lib64/libparted.so.2(ped_disk_new+0x49) [0x7f7e7801d179]
  5: parted() [0x40722e]
  4: parted(non_interactive_mode+0x92) [0x40ccd2]
  3: parted(main+0x1102) [0x405f52]
  2: /lib64/libc.so.6(__libc_start_main+0xf1) [0x7f7e777ec1e1]
  1: parted(_start+0x2a) [0x40610a]


You found a bug in GNU Parted! Here's what you have to do:

Don't panic! The bug has most likely not affected any of your data.
Help us to fix this bug by doing the following:

Check whether the bug has already been fixed by checking
the last version of GNU Parted that you can find at:

    http://ftp.gnu.org/gnu/parted/

Please check this version prior to bug reporting.

If this has not been fixed yet or if you don't know how to check,
please visit the GNU Parted website:

    http://www.gnu.org/software/parted

for further information.

Your report should contain the version of this release (3.2)
along with the error message below, the output of

    parted DEVICE unit co print unit s print

and the following history of commands you entered.
Also include any additional information about your setup you
consider important.

Assertion (gpt_disk_data->entry_count <= 8192) at gpt.c:793 in function
_parse_header() failed.

Aborted                                                                   

Итак, partedотказывается работать с GPT, имеющим более 8192 записей о разделах. Никто никогда так не делает, так что это должно быть коррумпировано, верно?

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

0
06.11.2019, 12:05
2 ответа

Предполагая, что вы хотите запустить ant cleanвнутри каждого каталога mainlineв иерархии каталогов, которую вы показываете:

for mainline in project/folder*/mainline/; do
    ( cd "$mainline" && ant clean )
done

Это приведет к перебору путей к каждому из mainlineкаталогов. Для каждого такого пути тело цикла изменяется на этот каталог и запускается ant cleanвнутри него.

Скобки вокруг команды в цикле запускают эти команды в оболочке sub -. Изменение рабочего каталога является локальным для этой подпрограммы -оболочки (, нам не нужно «выходить» из каталога, в который мы cdпопадаем ).


Если mainlineкаталоги, которые вы показываете, являются единственными такими каталогами, вы можете использовать findследующим образом:

find project -type d -name mainline -execdir sh -c 'cd mainline && ant clean' \;

Это найдет любой каталог с именем mainlineв каталоге projectили ниже него, а затем выполнит ant cleanв каждом из них. Действие -execdirне является стандартным -, но обычно реализуется утилитой findна большинстве Unix.

Вы также можете найти build.xmlфайлы, которые antиспользует по умолчанию, и выполнить ant cleanв каждом каталоге mainline, содержащем такой файл:

find project -type f -path '*/mainline/build.xml' -execdir ant clean \;
3
28.01.2020, 02:29

Делай так:

$ cd project/
$ find. -type d -name "mainline" -exec ls -l {} \;

Это найдет каталоги с именем «mainline» внутри текущей папки (project/ )и выполнит ls -lдля каждого из них

0
28.01.2020, 02:29

Теги

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