Необходимо создать расширенный раздел в освобожденном пространстве. Расширенные разделы могут быть разделены на столько логических разделов, сколько Вам нужно.
Если Вы хотите сохранить свой текущий загрузчик, да, необходимо установить загрузчик каждого дистрибутива в корень их раздела, или еще лучше, не установить один вообще. После каждой установки необходимо будет загрузиться в исходную систему и обновить личинку, таким образом, она обнаружит новые установки.
find directoryname -type f -exec grep -l {} {} \;
Это говорит найти
для поиска простых файлов (т.е. исключая каталоги, устройства, символические ссылки и т.д.) и для каждого найденного файла выполнить grep
с заданными параметрами. -l
поручает grep просто показать имя файла, а не совпадающую строку. {}
означает имя файла, \;
отменяет команду.
Конечно, вы, вероятно, имели в виду, что нужно искать само имя файла, а не путь. Это означает, что часть каталога должна быть удалена из первой части {}
. Одним из решений может быть:
find directoryname -type f -exec sh -c 'grep -l $(basename {}) {}' \;
Для каждого файла теперь запускается оболочка, так как подстановка параметров с $( ... )
должна быть выполнена. basename
strips off any leading directory part.
Обратите внимание, что необходимо использовать одинарные кавычки, иначе $( ... ) часть будет вычислена при вводе команды, а не при запуске оболочки с помощью find.
В системе GNU вы можете сделать:
find . -type f -printf '%f\0%p\0' | xargs -r0n2 grep -lFe
( (
--тип f
- это только для регулярных файлов . Изменить на -xtype f
Если вы также хотите рассмотреть SymLinks для обычных файлов).
: это сработало:
find /path/ -type f -exec sh -c "grep -l \"\$(basename {})\" {}" \;
Explanation:
-тип f
: найти только файлыsh -c
: выполнить оболочку для каждого файлаgrep -l
: показать только имена файлов\$(basename {})
: выполнить оболочку для каждого файлаgrep -l
: показать только имена файлов\$(basename {})
: grep для basenameЧтобы быть максимально переносимым и работать, когда имена файлов могут включать пробелы или другие символы из IFS
, а также на системах, где find
не обрабатывает {}
внутри кавычек, используйте find -exec
в комбинации с sh
и обычным передачей параметров:
find DIRECTORY -type f -exec sh -c 'grep -lFe "$(basename "$1")" "$1"' sh {} ';'
find DIRECTORY -type f
перечисляет все обычные файлы в рамках DIRECTORY
рекурсивно. -exec ... ';'
выполняет команду для каждого найденного файла. Его суть - команда sh
до {}
, которая:
grep -lFe "$(basename "$1")" "$1"
для каждого найденного файла, который совпадает, и который:
$1
), используя подстановку команды и basename - и подстановка команды, и переменная кавычки для учета тех случаев, когда они могут содержать пробелы или подстановочные знаки; и grep
s совпадающего файла (все еще "$1
") для этого базового имени, используя -l
для печати только имени совпадающего файла. "$1"
снова цитируется для учета пустых строк или подстановочных символов. sh
: "sh
" и {}
. sh
предназначен для встроенного скрипта $0
(имя выполняющейся программы, которую оболочка использует, например, для сообщения об ошибках). find
заменит аргумент, состоящий точно из {}
на совпадающее имя файла, так что сам скрипт sh
получит единственный аргумент, полный путь к файлу которого доступен в виде $1
. Это будет работать на любой POSIX-совместимой системе. Использование {}
внутри цитируемой строки с find -exec
имеет поведение, определяемое реализацией, и поэтому не переносится (хотя поддерживается GNU grep
и большинством BSD) и опасно, так как имя файла интерпретируется как код оболочки .
Произвольные имена файлов всегда нуждаются в кавычках, если они могут содержать пробелы, символы подстановки или неизвестно значение переменной разделителя входных полей IFS
; в противном случае они будут разбиты на несколько слов и заставят программу вести себя неожиданно.
Более эффективно можно использовать find -exec
с помощью +
для запуска минимально возможного количества оболочек:
find DIRECTORY -type f -exec sh -c 'for x in "$@" ; do grep -lFe "$(basename "$x")" "$x" ; done' sh {} '+'
Это все еще портативно, но предоставляет множество файловых путей к каждому выполнению sh
, так что запускается не так много оболочек. Внутри оболочки программы находится цикл for
, который смотрит на каждый из файлов. Если это то, что будет выполняться часто, то это лучший вариант, чем использовать ";
" для завершения команды.