Это действительно то, что вам решать. То, что может повлиять на это решение, может быть связано с тем, хорошо ли оно выглядит или читабельно. С точки зрения скорости выполнения, это не имело бы большого значения.
Возможность создания трех подкаталогов в уже существующем каталоге/path/to/dir
:
mkdir /path/to/dir/a \
/path/to/dir/b \
/path/to/dir/b
( cd /path/to/dir && mkdir a b c )
(подоболочка позволяет пропустить cd
обратно в исходный рабочий каталог)
С оболочкой, которая знает раскрытие фигурных скобок (, это по существу то же самое, что и версияcd
-без вышеизложенного, поскольку оболочка расширит раскрытие фигурных скобок перед вызовомmkdir
):
mkdir /path/to/dir/{a,b,c}
Утилита mkdir
, скорее всего, будет использовать функцию mkdir()
библиотеки C. Эта функция не изменяет рабочие каталоги перед созданием каталога, для создания которого она предназначена 1 .
Другое дело, когда вы запускаете скрипты, которым важно выполняться в определенном рабочем каталоге. Если скрипт ожидает найти файлы, используя относительные пути из своего текущего рабочего каталога, то, очевидно, вам придется убедиться, что рабочий каталог правильный, прежде чем запускать команду, возможно, с помощью
( cd directory && thescript )
... если скрипт не сделает это сам.
1 Небольшое исправление :В Linux командаmkdir -p a/b/c
будет вызывать mkdir("a")
,chdir("a")
, mkdir("b")
, chdir("b")
, mkdir("c")
, а в OpenBSD будет просто вызывать mkdir("a")
, mkdir("a/b")
, mkdir("a/b/c")
. В Linux создание дополнительного одиночного каталога a/b/c/d
с mkdir a/b/c/d
вызовет просто mkdir("a/b/c/d")
.
Таким образом, в Linux mkdir -p
действительно будет внутренне "выполнять cd
" для каждого промежуточного пути при создании каталогов (, тогда как mkdir
без -p
этого не делает ).
Флаг -p
для утилиты mkdir
заставляет ее создавать любой отсутствующий промежуточный каталог, и очевидно, что разработчики BSD и Linux делают это немного по-разному.
Мне не известен простой способ. Я бы сказал нет, это невозможно напрямую.
Если бы admin2/
был подобъемом, тогда не было бы проблем. Я не думаю, что вы можете прозрачно и мгновенно преобразовать каталог в подтом.
Есть обходной путь:
Создайте снимок всего подтома, который содержит admin2/
.
Удалите из снимка все, кроме admin2/
*.
Изменение порядка данных в снимке:
admin2/
*в каталог верхнего -уровня моментального снимка; admin2/
*, теперь пустой )из моментального снимка. Измените владельца и режим каталога верхнего уровня -моментального снимка в соответствии с исходным каталогом admin2/
.
Таким образом, вы вручную создаете подтом, который является тем, что вам нужно :снимком каталога.
Если вы хотите повторить этот процесс в будущем, рассмотрите возможность замены исходного каталога подтомом. Переместите каталог в сторону (, переименуйте или удалите его ), затем переместите подтом на его место. Обратите внимание, что подтом становится /home/admin2/
, так что вы, скорее всего, захотите создать еще один снимок.Но теперь создать снимок легко, команда, которую вы попробовали, теперь должна работать.
*Не путайте admin2/
в снимке с исходным каталогом. Там, где я обозначаю admin2/
звездочкой, я имею в виду admin2/
на снимке.
Мета-примечание :Честно говоря, я почти продублировал этот другой ответ . Вопрос заключается в преобразовании каталога в подтом, что вы можете или не хотите делать. Из-за этой разницы я не просто указал вам на другой ответ; Я решил объяснить процедуру в контексте вашего вопроса. Но разница в основном в вопросе. Единственная разница в процедуре заключается в том, измените ли вы в конечном итоге несколько имен или нет. Если вы найдете мой ответ полезным, подумайте о том, чтобы проголосовать за связанный.
Моментальные снимки можно делать только для подтомов. Не существует прямого способа преобразовать каталог в подтом.
Но если вам нужна только копия каталога с теми же данными на диске, вы можете следовать BTRFS Wiki и использоватьcp --reflink
:
cp -ax --reflink=always src/. dest
Это создаст обычную копию вашего каталога, но вместо копирования всех файловых данных они будут общими (= reflinked )с исходным каталогом. По сути, это то же самое, что и моментальный снимок, и если вы хотите иметь копию в отдельном подтоме, вы можете просто создать пустой подтом и скопировать в него каталог.
В зависимости от ваших данных это может быть быстрее, чем ответ @Kamils , потому что удаление всех остальных файлов может занять некоторое время для огромного количества файлов.