1. Нет никакой потребности определить деревья каталогов индивидуально:
Плохой путь:
~ $ mkdir tmp
~ $ cd tmp
~/tmp $ mkdir a
~/tmp $ cd a
~/tmp/a $ mkdir b
~/tmp/a $ cd b
~/tmp/a/b/ $ mkdir c
~/tmp/a/b/ $ cd c
~/tmp/a/b/c $
Хороший путь:
~ $ mkdir -p tmp/a/b/c
2. Архивация:
Иногда я видел, что люди перемещают любой tar как a.tar к другому каталогу, который, оказывается, каталог, где они хотят извлечь архив. Но это не нужно, поскольку-C опция может использоваться здесь для определения каталога с этой целью.
~ $ tar xvf -C tmp/a/b/c newarc.tar.gz
3. Важность операторов управления:
Предположим, что существует две команды, но только если первая команда работает, затем второй должен работать, иначе вторая команда ни за чем не работала бы. Так, здесь команда должна быть выполнена, только если другая команда возвращает нулевой статус выхода.
Пример:
~ $ cd tmp/a/b/c && tar xvf ~/archive.tar
В вышеупомянутом примере содержание архива должно быть извлечено в каталоге: c, но только если каталог существует. Если каталог не существует, команда tar не работает, таким образом, ничто не извлечено.
По крайней мере, в мире GNU:
touch --date=@1403970787 file
как с датой
.
С помощью perl
:
$ perl -e 'utime (stat($_))[8], time(), $_ for @ARGV' file1 file2 ...
Это изменит mtime всех файлов в @ARGV
. (stat($_))[8]
это время файла.
utime
может получить список файлов, если вас не волнует изменение времени, вы можете попробовать:
$ perl -e '$t = time(); utime $t, $t, @ARGV' file1 file2 ...
Примечание
utime
зависит от библиотеки времени исполнения C и используемой файловой системы. подробнее смотрите в perldoc -f utime
и perldoc perlport
.
С помощью команды touch
от GNU coreutils (т.е. на не встраиваемых Linux и Cygwin) смотрите полное руководство (обычно доступно в локальном информационном формате) для документирования форматов ввода даты . Даты эпохи обозначаются префиксом @
:
touch -d @1234567890 foo
Это также работает с BusyBox (по крайней мере, на некоторых системах, это может зависеть от опций компиляции).
С помощью *BSD, я не думаю, что вы можете сделать это только с помощью touch
, но вы можете позвонить date
, чтобы отформатировать время эпохи в формат, который touch
принимает.
touch -d "$(date -r 1234567890 +%Y%m%d%H%M.%S)" foo
POSIX, как известно, не имеет возможности манипулировать датами эпохи. Вы можете использовать perl.