Рокировка имен файлов в Linux
Часто ли вам приходилось менять местами названия двух файлов? Внутри я предлагаю вашему вниманию скрипт, который позволяет делать это одной командой, а не 3мя.
Конечно, для большинства эта задача не кажется такой уж трудоемкой, однако лично мне было бы приятней делать это одной командой, а не тремя. Специально для этой задачи я написал небольшой bash-скрипт «cas»(от castling (англ.) — рокировка) и решил с вами им поделиться. Чтобы пользоваться им на своей системе, вы должны сохранить содержимое листинга в файл(например, cas), поместить его, скажем в /usr/bin(или любой другой путь, находящийся в $PATH) и сделать его исполняемым
Скрипт делался для себя и по большей части из-за интереса и от «нечего делать», однако конструктивная критика, замечания, пожелания и т.п. приветствуются.
Теперь листинг самого скрипта:
Конечно, для большинства эта задача не кажется такой уж трудоемкой, однако лично мне было бы приятней делать это одной командой, а не тремя. Специально для этой задачи я написал небольшой bash-скрипт «cas»(от castling (англ.) — рокировка) и решил с вами им поделиться. Чтобы пользоваться им на своей системе, вы должны сохранить содержимое листинга в файл(например, cas), поместить его, скажем в /usr/bin(или любой другой путь, находящийся в $PATH) и сделать его исполняемым
chmod a+x /usr/bin/cas. Как пользоваться им, думаю, проблем не возникнет. Скрипт делался для себя и по большей части из-за интереса и от «нечего делать», однако конструктивная критика, замечания, пожелания и т.п. приветствуются.
Теперь листинг самого скрипта:
#!/bin/bash
#В этой переменной будет имя и путь для первого файла
what=$1
#В этой для второго
for_what=$2
#путь к временному каталогу
TMP=/tmp
#рандомная строка, которая будет добавляться к временному имени файла
random_sybm=$(cat /dev/urandom| tr -dc 'a-zA-Z0-9' | fold -w 10| head -n 1)
#функция вывода текста, если программа запущена без параметров
usage() {
echo "Usage: $0 1ST_FILE 2ND_FILE
Try 'cas --help' for more information."
exit
}
#функция вывода справки
show_help() {
echo "Usage: $0 1ST_FILE 2ND_FILE
Changes the file name 1ST_FILE to 2ND_FILE and 2ND_FILE to 1ST_FILE.
Available options:
--help Display this help and exit.
--version Output version information and exit.
"
exit
}
#функция вывода версии скрипта
show_version() {
echo "cas 0.11
This is free software. You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.
Written by Mikhail M, mihail.ite@gmail.com.
"
exit
}
#Функция, которая выполняет переименование/перемещение файлов
do_castling_file() {
mv $what $TMP/castling_$random_sybm
mv $for_what $what
mv $TMP/castling_$random_sybm $for_what
}
#Цикл для обработки аргументов командной строки
for i in $*; do
if [[ $i == "--help" || $i == "-h" ]]; then
show_help
fi
if [[ $i == "--version" || $i == "-v" ]]; then
show_version
fi
done
#Если количество параметров < 2, то вывести справочную информацию о том как использовать скрипт
if [ $# -ne 2 ]; then
usage
fi
#Проверяем имеем ли необходимые привилегии на чтение файлов
if [ -r $what ]; then
if [ -r $for_what ]; then
#А на запись?
if [ -w $what ]; then
if [ -w $for_what ]; then
#Если все ОК, то вызываем функцию перемещения
do_castling_file
else
#Выводим ошибку, если не имеем прав на запись в файл
echo "No permission to write a file $for_what"
exit 2
fi
else echo "No permission to write a file $what"
exit 2
fi
else
#Выводим ошибку, если не имеем прав на чтение из файла
echo "File $for_what doesin't exist or you haven't permissions for reading"
exit 2
fi
else
echo "File $what doesin't exist or you haven't permissions for reading"
exit 2
fi
#Если выполнение скрипта дошло до сюда, то выходим и возвращаем код ошибки 0
exit 0

комментарии (27)