Я использую Greyhole, и он идеально подходит для моего использования:
повторное использование домашним сервером запасных hdds с разными брендами, моделями, размерами все пространство hdds можно рассматривать как одно большое крепление (например, jbod) вы можете устанавливать разные домены с различными потребностями резервирования (т. е. Photos = max redundancy, Data = простая избыточность, фильмы = нулевая избыточность). Обновление hdds может выполняться по одному (т. е. вы можете удалить 500 ГБ hdd и замените его на 4 тб hdd, увеличивая общую емкость) потеря одного hdd потеряет только данные с нулевым избыточным резервированием на этом hdd, если hdd отправляет раннее предупреждение, которое вот-вот выйдет из строя (из мониторинга интеллектуальных параметров), я могу легко заменить его с другим без потери данных hdds можно перенести из sata в USB-корпус, не делая ничего на самом деле, для хранения может быть что угодно: sata hdd, usb hdd, удаленный сетевой ресурс .... (ОЧЕНЬ ВАЖНО), если вы удалите hdd из система Greyhole, это нормально отформатированный диск ext4 с вашими данными в папках easiОграничения:
домашний сервер Доступ к данным Greyhole должен осуществляться из Samba-акций (даже локально).Я бы сделал
alias cd1='cd "$(printf %s\\n */ | sed q)"'
alias cd2='cd "$(printf %s\\n */ | sed -n 2p\;2q)"'
и т.п., но у вас может быть проблема, если нет ни одного или двух подкаталогов.
Я только что сделал это:
#!/bin/bash
dir_counter=0
for i in *; do
echo "Checking "$i"";
if [ -d "$i" ]; then
echo "$i is a directory"
let dir_counter=dir_counter+1
if [[ "$dir_counter" == 2 ]]; then
cd "$i"
#inside of $i now
#do whatever you like
pwd
exit 0
fi
else
echo "$i is NOT a directory"
fi
done
Я не знаю, является ли это наилучшим способом выполнить то, что вы хотите.
Использование:
[ f2]Скрипт будет просто cd во втором каталоге, который он найдет. Просто имейте в виду, что это не будет работать для скрытых каталогов.
Я написал для вас какой-то скрипт, но это не полный ответ на ваш вопрос, но я уверен, что он вам поможет. Я могу перечислить ваш первый каталог с помощью моей команды.
ls | head -n 1 |awk '{print $1 }'
Я не уверен, как тогда перейти в каталог. Я принял ваш пример.
jai@frank-Jai:~/sandbox$ ls | head -n 1 |awk '{print $1 }'
dir1
jai@frank-Jai:~/sandbox$ ls | head -n 2 |awk '{print $1 }'
dir1
dir2
jai@frank-Jai:~/sandbox$
мы можем указать столько каталогов, сколько хотим.
Я немного не уверен в том, чего вы хотите на самом деле, но я интерпретирую ваш вопрос как желающий «однострочный», который захватывает список каталогов в $HOME, например, а затем позволяет вам cd к первому или второй каталог в этом списке, или любой из них в этом отношении.
Это, я думаю, возможно, если вы поместите все каталоги в массив, а затем вы можете cd в любой каталог в этом массиве, используя например, cd "${cdarray[1]}", что фактически приведет вас ко второму каталогу в списке, поскольку массивы Bash всегда начинаются с 0, поэтому индекс 0 в массиве фактически является первым каталогом.
Вот один слой, который я создал, который вы можете использовать; измените его в соответствии с вашими потребностями. Я исключаю каталоги из списка, которые на самом деле символические ссылки ([[ ! -L "$d" ]]). Вы можете удалить этот тест, если вам нужно включить его и просто сохранить тест для каталога.
Это пример для каталога $HOME, и я добавил $HOME к команде, поэтому пути теперь абсолютны, поэтому вы сможете позже запустить cd "${cdarray[1]}" как отдельную команду из любого места, и она будет работать. Если вы создадите его для другого каталога, просто укажите этот абсолютный путь вместо $HOME в приведенной ниже команде, если конечно вы не хотите, чтобы он работал только относительно каталога, в котором он был создан.
cdarray=(); for d in *; do [[ ! -L "$HOME/$d" && -d "$HOME/$d" ]] && cdarray+=("$HOME/$d"); done; cd "${cdarray[1]}"
Теперь все каталоги с пробелами в именах будут успешно обработаны.
Объявлен индексированный массив, а затем, если найденный элемент является каталогом, а не символической ссылкой, он добавляется в массив и то после запятой мы cd в нужную нам директорию, например cd "${cdarray[1]}".
Вы можете добавить || exit 1 в конец, если вы использовали это в скрипте, но я не добавил это выше, поскольку он закроет интерактивный терминал, если команда cd не удалась. [ ! d8]
Я немного не уверен в том, чего вы хотите на самом деле, но я интерпретирую ваш вопрос как желающий «однострочный», который захватывает список каталогов в $HOME, например, а затем позволяет вам cd к первому или второй каталог в этом списке, или любой из них в этом отношении.
Это, я думаю, возможно, если вы поместите все каталоги в массив, а затем вы можете cd в любой каталог в этом массиве, используя например, cd "${cdarray[1]}", что фактически приведет вас ко второму каталогу в списке, поскольку массивы Bash всегда начинаются с 0, поэтому индекс 0 в массиве фактически является первым каталогом.
Вот один слой, который я создал, который вы можете использовать; измените его в соответствии с вашими потребностями. Я исключаю каталоги из списка, которые на самом деле символические ссылки ([[ ! -L "$d" ]]). Вы можете удалить этот тест, если вам нужно включить его и просто сохранить тест для каталога.
Это пример для каталога $HOME, и я добавил $HOME к команде, поэтому пути теперь абсолютны, поэтому вы сможете позже запустить cd "${cdarray[1]}" как отдельную команду из любого места, и она будет работать. Если вы создадите его для другого каталога, просто укажите этот абсолютный путь вместо $HOME в приведенной ниже команде, если конечно вы не хотите, чтобы он работал только относительно каталога, в котором он был создан.
cdarray=(); for d in *; do [[ ! -L "$HOME/$d" && -d "$HOME/$d" ]] && cdarray+=("$HOME/$d"); done; cd "${cdarray[1]}"
Теперь все каталоги с пробелами в именах будут успешно обработаны.
Объявлен индексированный массив, а затем, если найденный элемент является каталогом, а не символической ссылкой, он добавляется в массив и то после запятой мы cd в нужную нам директорию, например cd "${cdarray[1]}".
Вы можете добавить || exit 1 в конец, если вы использовали это в скрипте, но я не добавил это выше, поскольку он закроет интерактивный терминал, если команда cd не удалась. [ ! d8]
Я немного не уверен в том, чего вы хотите на самом деле, но я интерпретирую ваш вопрос как желающий «однострочный», который захватывает список каталогов в $HOME, например, а затем позволяет вам cd к первому или второй каталог в этом списке, или любой из них в этом отношении.
Это, я думаю, возможно, если вы поместите все каталоги в массив, а затем вы можете cd в любой каталог в этом массиве, используя например, cd "${cdarray[1]}", что фактически приведет вас ко второму каталогу в списке, поскольку массивы Bash всегда начинаются с 0, поэтому индекс 0 в массиве фактически является первым каталогом.
Вот один слой, который я создал, который вы можете использовать; измените его в соответствии с вашими потребностями. Я исключаю каталоги из списка, которые на самом деле символические ссылки ([[ ! -L "$d" ]]). Вы можете удалить этот тест, если вам нужно включить его и просто сохранить тест для каталога.
Это пример для каталога $HOME, и я добавил $HOME к команде, поэтому пути теперь абсолютны, поэтому вы сможете позже запустить cd "${cdarray[1]}" как отдельную команду из любого места, и она будет работать. Если вы создадите его для другого каталога, просто укажите этот абсолютный путь вместо $HOME в приведенной ниже команде, если конечно вы не хотите, чтобы он работал только относительно каталога, в котором он был создан.
cdarray=(); for d in *; do [[ ! -L "$HOME/$d" && -d "$HOME/$d" ]] && cdarray+=("$HOME/$d"); done; cd "${cdarray[1]}"
Теперь все каталоги с пробелами в именах будут успешно обработаны.
Объявлен индексированный массив, а затем, если найденный элемент является каталогом, а не символической ссылкой, он добавляется в массив и то после запятой мы cd в нужную нам директорию, например cd "${cdarray[1]}".
Вы можете добавить || exit 1 в конец, если вы использовали это в скрипте, но я не добавил это выше, поскольку он закроет интерактивный терминал, если команда cd не удалась. [ ! d8]
Я немного не уверен в том, чего вы хотите на самом деле, но я интерпретирую ваш вопрос как желающий «однострочный», который захватывает список каталогов в $HOME, например, а затем позволяет вам cd к первому или второй каталог в этом списке, или любой из них в этом отношении.
Это, я думаю, возможно, если вы поместите все каталоги в массив, а затем вы можете cd в любой каталог в этом массиве, используя например, cd "${cdarray[1]}", что фактически приведет вас ко второму каталогу в списке, поскольку массивы Bash всегда начинаются с 0, поэтому индекс 0 в массиве фактически является первым каталогом.
Вот один слой, который я создал, который вы можете использовать; измените его в соответствии с вашими потребностями. Я исключаю каталоги из списка, которые на самом деле символические ссылки ([[ ! -L "$d" ]]). Вы можете удалить этот тест, если вам нужно включить его и просто сохранить тест для каталога.
Это пример для каталога $HOME, и я добавил $HOME к команде, поэтому пути теперь абсолютны, поэтому вы сможете позже запустить cd "${cdarray[1]}" как отдельную команду из любого места, и она будет работать. Если вы создадите его для другого каталога, просто укажите этот абсолютный путь вместо $HOME в приведенной ниже команде, если конечно вы не хотите, чтобы он работал только относительно каталога, в котором он был создан.
cdarray=(); for d in *; do [[ ! -L "$HOME/$d" && -d "$HOME/$d" ]] && cdarray+=("$HOME/$d"); done; cd "${cdarray[1]}"
Теперь все каталоги с пробелами в именах будут успешно обработаны.
Объявлен индексированный массив, а затем, если найденный элемент является каталогом, а не символической ссылкой, он добавляется в массив и то после запятой мы cd в нужную нам директорию, например cd "${cdarray[1]}".
Вы можете добавить || exit 1 в конец, если вы использовали это в скрипте, но я не добавил это выше, поскольку он закроет интерактивный терминал, если команда cd не удалась. [ ! d8]
Я немного не уверен в том, чего вы хотите на самом деле, но я интерпретирую ваш вопрос как желающий «однострочный», который захватывает список каталогов в $HOME, например, а затем позволяет вам cd к первому или второй каталог в этом списке, или любой из них в этом отношении.
Это, я думаю, возможно, если вы поместите все каталоги в массив, а затем вы можете cd в любой каталог в этом массиве, используя например, cd "${cdarray[1]}", что фактически приведет вас ко второму каталогу в списке, поскольку массивы Bash всегда начинаются с 0, поэтому индекс 0 в массиве фактически является первым каталогом.
Вот один слой, который я создал, который вы можете использовать; измените его в соответствии с вашими потребностями. Я исключаю каталоги из списка, которые на самом деле символические ссылки ([[ ! -L "$d" ]]). Вы можете удалить этот тест, если вам нужно включить его и просто сохранить тест для каталога.
Это пример для каталога $HOME, и я добавил $HOME к команде, поэтому пути теперь абсолютны, поэтому вы сможете позже запустить cd "${cdarray[1]}" как отдельную команду из любого места, и она будет работать. Если вы создадите его для другого каталога, просто укажите этот абсолютный путь вместо $HOME в приведенной ниже команде, если конечно вы не хотите, чтобы он работал только относительно каталога, в котором он был создан.
cdarray=(); for d in *; do [[ ! -L "$HOME/$d" && -d "$HOME/$d" ]] && cdarray+=("$HOME/$d"); done; cd "${cdarray[1]}"
Теперь все каталоги с пробелами в именах будут успешно обработаны.
Объявлен индексированный массив, а затем, если найденный элемент является каталогом, а не символической ссылкой, он добавляется в массив и то после запятой мы cd в нужную нам директорию, например cd "${cdarray[1]}".
Вы можете добавить || exit 1 в конец, если вы использовали это в скрипте, но я не добавил это выше, поскольку он закроет интерактивный терминал, если команда cd не удалась. [ ! d8]
Я немного не уверен в том, чего вы хотите на самом деле, но я интерпретирую ваш вопрос как желающий «однострочный», который захватывает список каталогов в $HOME, например, а затем позволяет вам cd к первому или второй каталог в этом списке, или любой из них в этом отношении.
Это, я думаю, возможно, если вы поместите все каталоги в массив, а затем вы можете cd в любой каталог в этом массиве, используя например, cd "${cdarray[1]}", что фактически приведет вас ко второму каталогу в списке, поскольку массивы Bash всегда начинаются с 0, поэтому индекс 0 в массиве фактически является первым каталогом.
Вот один слой, который я создал, который вы можете использовать; измените его в соответствии с вашими потребностями. Я исключаю каталоги из списка, которые на самом деле символические ссылки ([[ ! -L "$d" ]]). Вы можете удалить этот тест, если вам нужно включить его и просто сохранить тест для каталога.
Это пример для каталога $HOME, и я добавил $HOME к команде, поэтому пути теперь абсолютны, поэтому вы сможете позже запустить cd "${cdarray[1]}" как отдельную команду из любого места, и она будет работать. Если вы создадите его для другого каталога, просто укажите этот абсолютный путь вместо $HOME в приведенной ниже команде, если конечно вы не хотите, чтобы он работал только относительно каталога, в котором он был создан.
cdarray=(); for d in *; do [[ ! -L "$HOME/$d" && -d "$HOME/$d" ]] && cdarray+=("$HOME/$d"); done; cd "${cdarray[1]}"
Теперь все каталоги с пробелами в именах будут успешно обработаны.
Объявлен индексированный массив, а затем, если найденный элемент является каталогом, а не символической ссылкой, он добавляется в массив и то после запятой мы cd в нужную нам директорию, например cd "${cdarray[1]}".
Вы можете добавить || exit 1 в конец, если вы использовали это в скрипте, но я не добавил это выше, поскольку он закроет интерактивный терминал, если команда cd не удалась. [ ! d8]