Мне удалось найти интересную статью о том, почему нужно было заменить init и чем его заменить. Процитируем: «Процесс инициализации запускается последовательно, т. е. одна задача запускается только после успешного запуска последней задачи и ее загрузки в память. Это часто приводило к задержке и длительному времени загрузки. Однако systemd был разработан не для скорости, а для аккуратное выполнение дел, что, в свою очередь, позволяет избежать всех -необходимых ООН задержек».
Итак, чтобы ответить на мой собственный вопрос, похоже, что systemd заменил init.d по некоторым уважительным причинам, и другие методы, такие как то, что упоминается в комментариях GypsyCosmonaut, заключается в том, чтобы просто иметь сценарий запуска в ~/.config/autostart
, который также поставляется с удобным инструментом запуска приложений, если вы используете рабочий стол.
пример init.d
На всякий случай, если кто-то действительно хочет сделать то, что я изначально пытался сделать, вам просто нужна ссылка на каталог /etc/init.d.
Например, если у вас есть файл.jar, который нужно запустить с помощью команд, подобных /etc/init.d/yourProgram start
или /etc/init.d/yourProgram stop
, вы просто сделаете что-то похожее на:
sudo ln -s /path/to/yourProgram.jar /etc/init.d/yourProgram
Описанный выше метод также работает, если вы укажете ему скрипт, который запускает вашу программу, а не.jar
запуск init.d при загрузке
Если вы хотите, чтобы эта служба запускалась при запуске,использовать:
sudo service yourProgram defaults
Это автоматически заглянет в /etc/init.d/ и найдет вашу ссылку на актуальный скрипт.
Вы, конечно, можете использовать find
, но также реже updatedb
и locate
.
Во-первых, нам нужно использовать updatedb
для создания базы данных существующих файлы, которые будут использоваться последующими командами locate
. Идти к /home/me/files
и сделать:
updatedb --require-visibility 0 -o locate.db -U.
Теперь мы готовы использовать locate
вместе с Bash {a..b}
синтаксис для поиска списка файлов. Например:
$ locate -d./locate.db file_{112..125}.txt
./files_11/file_112.txt
./files_11/file_113.txt
./files_12/file_124.txt
./files_12/file_125.txt
$ locate -d./locate.db file_{100..105}.txt
./files_10/file_100.txt
./files_10/file_102.txt
./files_10/file_105.txt
$ locate -d./locate.db file_{103..106}.txt
./files_10/file_105.txt
./files_10/file_106.txt
Чтобы показать только количество найденных файлов, направьте locate
вывод через wc -l
.
Преимущество этого решения в том, что locate
работает очень быстро.
Недостатком является то, что вам придется повторно -создавать базу данных вручную. каждый раз, когда добавляются или переименовываются новые файлы (или, возможно, используетсяinotify
)и что locate
не может заменить найденные имена файлов на NUL, что привести к тому, что wc -l
вернет неверный счетчик в случае файлов, которые имеют новую строку в их именах.
Попробуйте это,
ls /home/test/files/*/file_{112..125}.txt 2> /dev/null | wc -l
Если вы хотите подсчитать только пронумерованные файлы от x до y:
$ tree files/
files/
├── file_100.txt
├── file_102.txt
├── file_105.txt
└── file_106.txt
0 directories, 4 files
$ start=103; end=106; echo files/* \
| grep -o '[[:digit:]]*' \
| awk '{ if ($1 >='$start' && $1 <= '$end') {++count}} END { print count }'
2
Но если вы действительно уверены, что в ваших именах файлов нет пробелов или разрывов строк, Ответ @msp9011 намного проще...