Я, как правило, делаю такие вещи, используя sed или awk для создания командных строк, а затем подключаю их к оболочке. В качестве возможного примера, если у вас есть файл только имен файлов xxxxx_a.tif,
sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt
, чтобы узнать, генерирует ли он команды, которые вы после этого, тогда
sed -e 's/\(.*\)_.*/geotifcp \1_a.tif \1_a.tfw \1_b.tif/' < list-file.txt | sh
[d2 ], чтобы запустить их все. Входная строка asdfasdfsadf_a.tif приводит к geotifcp asdfasdfsadf_a.tif asdfasdfsadf_a.tfw asdfasdfsadf_b.tif, считая, что входные имена файлов [filename]_a.tif и [filename]_a.tiw и имя выхода [filename]_b.tif. [!d3 ]
Сценарий ниже позволяет администратору хранить персонализированные сообщения в форме username_mm_dd_yyyy.txt в административном каталоге. Имя пользователя определяется автоматически и сопоставляется с именем файла и датой файла, который будет отображаться.
Сценарий также может иметь запись .desktop, которая должна быть помещена в каталог /etc/xdg/autostart. Это сделает скрипт отображаемым для каждого пользователя. В качестве альтернативы вы можете поместить файл .desktop в каталог каждого пользователя ~/.config/autostart.
#!/bin/bash
_get_username()
{
qdbus com.canonical.Unity \
/com/canonical/Unity/Session \
com.canonical.Unity.Session.UserName
}
_get_date()
{
date +%m_%d_%Y
}
_show_error()
{
MESSAGE="Can't read the file or file doesn't exist. Contact the admin for assistance"
zenity --error --title="Ooops, something went wrong!" --text="$MESSAGE"
}
main()
{
# replace this with the actual directory
# that you want to use for storing messages
MESSAGES_DIRECTORY="/tmp"
# file name is made up of username_mm_dd_yyyy
FILE="$MESSAGES_DIRECTORY"/"$( _get_username )"_"$( _get_date )".txt
echo "$FILE"
if [ -r "$FILE" ] ; then
zenity --text-info --title="Welcome, $( _get_username )" --filename="$FILE"
else
_show_error
fi
}
main
Ниже вы можете увидеть небольшую демонстрацию сценария в действии. Я создал файл в указанном формате в моей папке /tmp