touch
основная цель команды управляет метками времени файлов, и для создания файлов.
1. создание файлов
$ ls -l
total 0
$ touch file{1..3}
$ ls -l
total 0
-rw-rw-r--. 1 saml saml 0 Jan 12 13:33 file1
-rw-rw-r--. 1 saml saml 0 Jan 12 13:33 file2
-rw-rw-r--. 1 saml saml 0 Jan 12 13:33 file3
Примечание: total 0
вывод от ls -l
корректно. Эта реализация ls
показывает количество блоков, используемых файлами, когда они перечислены. Можно убедиться этого факта путем добавления -s
переключатель к ls
. Это перечислит блоки, используемые каждым файлом. Здесь я добавил 2 символа к file1 и file2.
$ ls -ls
total 8
4 -rw-rw-r--. 1 saml saml 3 Jan 13 12:07 file1
4 -rw-rw-r--. 1 saml saml 3 Jan 13 12:09 file2
0 -rw-rw-r--. 1 saml saml 0 Jan 13 12:05 file3
2. информация времени/даты файла - команда статистики
$ stat file1
File: ‘file1’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd02h/64770d Inode: 11403667 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ saml) Gid: ( 1000/ saml)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2014-01-12 13:33:38.279456149 -0500
Modify: 2014-01-12 13:33:38.279456149 -0500
Change: 2014-01-12 13:33:38.279456149 -0500
Birth: -
Мы можем использовать touch
управлять различными метками времени на данном файле.
3. выборка из сенсорной страницы справочника
-a change only the access time
-m change only the modification time
-t STAMP
use [[CC]YY]MMDDhhmm[.ss] instead of current time
4. управление временем доступа
$ touch -a -t200001010000 file1
$ stat file1
File: ‘file1’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd02h/64770d Inode: 11403667 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ saml) Gid: ( 1000/ saml)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2000-01-01 00:00:00.000000000 -0500
Modify: 2014-01-12 13:33:38.279456149 -0500
Change: 2014-01-12 13:38:52.023434696 -0500
Birth: -
5. управляйте изменяют время
$ touch -m -t200001010000 file1
$ stat file1
File: ‘file1’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd02h/64770d Inode: 11403667 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ saml) Gid: ( 1000/ saml)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2000-01-01 00:00:00.000000000 -0500
Modify: 2000-01-01 00:00:00.000000000 -0500
Change: 2014-01-12 13:39:31.060432026 -0500
Birth: -
Вы могли бы задаваться вопросом во время изменения (ctime). С помощью это нельзя управлять touch
. Это отслеживает время, любые из метаданных были затронуты файла. Дополнительную информацию см. в этом Вопросы и ответы U&L, названные: Что можно сделать в файл, не инициировав Метку времени "Изменения"?.
Это потому, что команда cd
выполняется внутри сценария, а не в вашей текущей среде оболочки. Если вы хотите, чтобы сценарий запускался в вашей текущей среде оболочки, запустите его следующим образом:
. /path/to/script.sh
Вывод моего собственного рабочего примера вашего сценария с pwd
вместо вашего if
оператор:
Jamey@CNU326BXDX ~
$ /usr/local/bin/this.sh
/cygdrive/c/users/jamey/downloads
Jamey@CNU326BXDX ~
$ . /usr/local/bin/this.sh
/cygdrive/c/users/jamey/downloads
Jamey@CNU326BXDX /cygdrive/c/users/jamey/downloads
$
Обратите внимание на текущий рабочий каталог после второго запуска сценария.
Ваш скрипт и особенно его внутренние команды cd
прекрасно работают при вызове из bash
с использованием source
или эквивалентных .
команды.
Главная проблема в том, что, как уже было сказано в комментарии @adonis, ваша оболочка, после правильной смены каталога, выйдет, если только файл с точным именем "*.cfg" не существует, что очень сомнительно.
Поскольку я предполагаю, что вы хотите использовать *.cfg в качестве образца, вот как я бы слегка изменил ваш скрипт, чтобы он работал как ожидалось:
#!/bin/bash # Note that the shebang is useless for a sourced script
model_dir=/mypath
chdir() { # use either function or (), both is a non portable syntax
cd $1
}
chdir ${model_dir}/config
if [ ! -s *.cfg ]; then # Single brackets here for the shell to expand *.cfg
echo $(date) "configure file does not exist"
exit 1 # dubious in a sourced script, it will end the main and only shell interpreter
fi