Как всегда, грузовик python задерживается, но:
делает его исполняемым, перетаскивая его через окно терминала, перетаскивая файл для копирования через окно терминала и устанавливая количество копий:
script file number_ofcopies
Число начальных нулей устанавливается автоматически, файлы называются file_001.pdf, file_002.pdf, а имена файлов помещены перед расширением.
Сценарий: [!d4 ]
#!/usr/bin/env python3
import sys
import shutil
orig = sys.argv[1]; n = sys.argv[2]; size = len(str(n)); out = (orig[:orig.rfind(".")], orig[orig.rfind("."):])
for item in [out[0]+"_"+(size-len(str(item)))*"0"+str(item)+out[1] for item in range(1, int(n)+1)]:
shutil.copyfile(orig, item)
Вы упомянули две вещи, которые, я считаю, не являются хорошими решениями:
Стандартные атрибуты файла Linux включают владельца и группу владельца. Я настоятельно рекомендую вам убедиться, что все файлы в /usr/local/bin (или фактически почти все каталоги, содержащие материалы, которые будут доступны всем пользователям) принадлежат root как пользователю и группе, а также доступны только для записи владельцем. Это мера безопасности, которая должна предотвратить непривилегированные изменения в файле, которые позже могут быть выполнены кем-то другим или с повышенными привилегиями с использованием sudo.
Так как владелец всех этих скриптов в /usr/local/bin должен быть root, мы не можем использовать это, чтобы отличать скрипты, которые вы хотите создать резервную копию.
Исполняемые файлы внутри подкаталоги /usr/local/bin не будут приняты системой как команды, которые вы можете запускать напрямую без пути. Причина в том, что для этого исполняемый файл должен быть непосредственно внутри каталога, указанного в переменной среды $PATH. Подкаталоги не включаются автоматически, каждое местоположение должно быть явно указано - опять же, как улучшение безопасности, чтобы снизить риск случайного выполнения ненадежного кода.
Хотя можно было бы добавить этот подкаталог во всех необходимых местоположениях, я бы воздержался от изменения всех пользователей $PATH (и не забывать, что конфигурация /etc/sudoers secure_path должна включать и новый каталог, если вы хотите, чтобы он был доступен при использовании sudo). [!d8 ]
Теперь, что вы могли бы сделать вместо этого? Вот несколько идей:
Если вам не нужны эти сценарии для всей системы для всех пользователей, но только для вашей собственной учетной записи, просто введите их в ~/bin (~ является вашим домашним каталогом). Это место находится только на вашем $PATH пользователя, а не на кого-либо еще.
Имейте в виду, что вам нужно перезапустить текущую оболочку один раз (закрыть и снова открыть окно терминала, набрать source ~/.profile или выйти из системы и вернуться обратно) если вы только что создали каталог во время текущего сеанса. Это связано с тем, что каталог добавляется только в том случае, если он существует, когда оболочка инициализирует себя. Вам никогда не придется делать это позже.
Просто укажите текстовый файл, в котором перечислены пути всех ваших скриптов / файлов которые вы хотите создать резервную копию. Затем вы можете просто обработать этот список другим скриптом / командой, подобной приведенной ниже, чтобы скопировать их все в каталог резервного копирования:
#!/bin/bash
backupdir=~/backup/scripts
listfile=~/backup/script-list.txt
while read line ; do
cp -- "$line" "$backupdir"
done < "$listfile"
Вам просто нужно сохранить файл списка (здесь ~/backup/script-list.txt) обновлен и хорошо отформатирован. В этой простой версии вы должны убедиться, что каждая строка содержит ровно один абсолютный путь к файлу, который вы хотите создать резервную копию, без начальных или конечных пробелов и без пустых строк. Конечно, сценарий можно было бы улучшить, чтобы иметь возможность обрабатывать такие случаи, но это просто быстрый прототип.
Просто подумайте о уникальной строке, которую вы добавляете ко всем своим собственным скриптам, например в комментарии. Это может выглядеть как *** CREATED BY BYTECOMMANDER *** или так, может быть, даже более уникальным. Затем вы можете создать сценарий резервного копирования, который сканирует /usr/local/bin для файлов, содержащих вашу подпись, и копирует их только, оставив других:
#!/bin/bash
backupdir=~/backup/scripts
signature="*** CREATED BY BYTECOMMANDER ***"
for scriptfile in /usr/local/bin/* ; do
if grep -qF "$signature" "$scriptfile" ; then
cp -- "$scriptfile" "$backupdir"
fi
done
Вы упомянули две вещи, которые, я считаю, не являются хорошими решениями:
Стандартные атрибуты файла Linux включают владельца и группу владельца. Я настоятельно рекомендую вам убедиться, что все файлы в /usr/local/bin (или фактически почти все каталоги, содержащие материалы, которые будут доступны всем пользователям) принадлежат root как пользователю и группе, а также доступны только для записи владельцем. Это мера безопасности, которая должна предотвратить непривилегированные изменения в файле, которые позже могут быть выполнены кем-то другим или с повышенными привилегиями с использованием sudo.
Так как владелец всех этих скриптов в /usr/local/bin должен быть root, мы не можем использовать это, чтобы отличать скрипты, которые вы хотите создать резервную копию.
Исполняемые файлы внутри подкаталоги /usr/local/bin не будут приняты системой как команды, которые вы можете запускать напрямую без пути. Причина в том, что для этого исполняемый файл должен быть непосредственно внутри каталога, указанного в переменной среды $PATH. Подкаталоги не включаются автоматически, каждое местоположение должно быть явно указано - опять же, как улучшение безопасности, чтобы снизить риск случайного выполнения ненадежного кода.
Хотя можно было бы добавить этот подкаталог во всех необходимых местоположениях, я бы воздержался от изменения всех пользователей $PATH (и не забывать, что конфигурация /etc/sudoers secure_path должна включать и новый каталог, если вы хотите, чтобы он был доступен при использовании sudo).
Теперь, что вы могли бы сделать вместо этого? Вот несколько идей:
Если вам не нужны эти сценарии для всей системы для всех пользователей, но только для вашей собственной учетной записи, просто введите их в ~/bin (~ является вашим домашним каталогом). Это место находится только на вашем $PATH пользователя, а не на кого-либо еще.
Имейте в виду, что вам нужно перезапустить текущую оболочку один раз (закрыть и снова открыть окно терминала, набрать source ~/.profile или выйти из системы и вернуться обратно) если вы только что создали каталог во время текущего сеанса. Это связано с тем, что каталог добавляется только в том случае, если он существует, когда оболочка инициализирует себя. Вам никогда не придется делать это позже.
Просто укажите текстовый файл, в котором перечислены пути всех ваших скриптов / файлов которые вы хотите создать резервную копию. Затем вы можете просто обработать этот список другим скриптом / командой, подобной приведенной ниже, чтобы скопировать их все в каталог резервного копирования:
#!/bin/bash
backupdir=~/backup/scripts
listfile=~/backup/script-list.txt
while read line ; do
cp -- "$line" "$backupdir"
done < "$listfile"
Вам просто нужно сохранить файл списка (здесь ~/backup/script-list.txt) обновлен и хорошо отформатирован. В этой простой версии вы должны убедиться, что каждая строка содержит ровно один абсолютный путь к файлу, который вы хотите создать резервную копию, без начальных или конечных пробелов и без пустых строк. Конечно, сценарий можно было бы улучшить, чтобы иметь возможность обрабатывать такие случаи, но это просто быстрый прототип.
Просто подумайте о уникальной строке, которую вы добавляете ко всем своим собственным скриптам, например в комментарии. Это может выглядеть как *** CREATED BY BYTECOMMANDER *** или так, может быть, даже более уникальным. Затем вы можете создать сценарий резервного копирования, который сканирует /usr/local/bin для файлов, содержащих вашу подпись, и копирует их только, оставив других:
#!/bin/bash
backupdir=~/backup/scripts
signature="*** CREATED BY BYTECOMMANDER ***"
for scriptfile in /usr/local/bin/* ; do
if grep -qF "$signature" "$scriptfile" ; then
cp -- "$scriptfile" "$backupdir"
fi
done
Вы упомянули две вещи, которые, я считаю, не являются хорошими решениями:
Стандартные атрибуты файла Linux включают владельца и группу владельца. Я настоятельно рекомендую вам убедиться, что все файлы в /usr/local/bin (или фактически почти все каталоги, содержащие материалы, которые будут доступны всем пользователям) принадлежат root как пользователю и группе, а также доступны только для записи владельцем. Это мера безопасности, которая должна предотвратить непривилегированные изменения в файле, которые позже могут быть выполнены кем-то другим или с повышенными привилегиями с использованием sudo.
Так как владелец всех этих скриптов в /usr/local/bin должен быть root, мы не можем использовать это, чтобы отличать скрипты, которые вы хотите создать резервную копию.
Исполняемые файлы внутри подкаталоги /usr/local/bin не будут приняты системой как команды, которые вы можете запускать напрямую без пути. Причина в том, что для этого исполняемый файл должен быть непосредственно внутри каталога, указанного в переменной среды $PATH. Подкаталоги не включаются автоматически, каждое местоположение должно быть явно указано - опять же, как улучшение безопасности, чтобы снизить риск случайного выполнения ненадежного кода.
Хотя можно было бы добавить этот подкаталог во всех необходимых местоположениях, я бы воздержался от изменения всех пользователей $PATH (и не забывать, что конфигурация /etc/sudoers secure_path должна включать и новый каталог, если вы хотите, чтобы он был доступен при использовании sudo).
Теперь, что вы могли бы сделать вместо этого? Вот несколько идей:
Если вам не нужны эти сценарии для всей системы для всех пользователей, но только для вашей собственной учетной записи, просто введите их в ~/bin (~ является вашим домашним каталогом). Это место находится только на вашем $PATH пользователя, а не на кого-либо еще.
Имейте в виду, что вам нужно перезапустить текущую оболочку один раз (закрыть и снова открыть окно терминала, набрать source ~/.profile или выйти из системы и вернуться обратно) если вы только что создали каталог во время текущего сеанса. Это связано с тем, что каталог добавляется только в том случае, если он существует, когда оболочка инициализирует себя. Вам никогда не придется делать это позже.
Просто укажите текстовый файл, в котором перечислены пути всех ваших скриптов / файлов которые вы хотите создать резервную копию. Затем вы можете просто обработать этот список другим скриптом / командой, подобной приведенной ниже, чтобы скопировать их все в каталог резервного копирования:
#!/bin/bash
backupdir=~/backup/scripts
listfile=~/backup/script-list.txt
while read line ; do
cp -- "$line" "$backupdir"
done < "$listfile"
Вам просто нужно сохранить файл списка (здесь ~/backup/script-list.txt) обновлен и хорошо отформатирован. В этой простой версии вы должны убедиться, что каждая строка содержит ровно один абсолютный путь к файлу, который вы хотите создать резервную копию, без начальных или конечных пробелов и без пустых строк. Конечно, сценарий можно было бы улучшить, чтобы иметь возможность обрабатывать такие случаи, но это просто быстрый прототип.
Просто подумайте о уникальной строке, которую вы добавляете ко всем своим собственным скриптам, например в комментарии. Это может выглядеть как *** CREATED BY BYTECOMMANDER *** или так, может быть, даже более уникальным. Затем вы можете создать сценарий резервного копирования, который сканирует /usr/local/bin для файлов, содержащих вашу подпись, и копирует их только, оставив других:
#!/bin/bash
backupdir=~/backup/scripts
signature="*** CREATED BY BYTECOMMANDER ***"
for scriptfile in /usr/local/bin/* ; do
if grep -qF "$signature" "$scriptfile" ; then
cp -- "$scriptfile" "$backupdir"
fi
done