Сначала вы попытались создать файл .tar. Помимо синтаксической ошибки, bodhi.zazen уже указал, что ваше имя файла tar должно появиться сразу после опции -f. Как метко заметил Уилф в своем ответе.
tar --newer-mtime=08-11-2013 -cvf /homedepot/yellowsolo/xz/6months/xz$tod-last6months.tar /homedepot/yellowsolo/xz/official/official /homedepot/yellowsolo/xz/home/home
Затем появляется еще одна ошибка. Вы собираетесь gzip /homedepot/yellowsolo/xz/6months/xz$tod-last6months.tar.gz, но этот файл не существует.
Скорее у вас есть файл /homedepot/yellowsolo/xz/6months/xz$tod-last6months.tar
Вы должны использовать
gzip /homedepot/yellowsolo/xz/6months/xz$tod-last6months.tar
Он создаст /homedepot/yellowsolo/xz/6months/xz$tod-last6months.tar.gz.
Примечание:
Вы можете сделать это напрямую,
tar --newer-mtime=08-11-2013 -cvzf /homedepot/yellowsolo/xz/6months/xz$tod-last6months.tar.gz /homedepot/yellowsolo/xz/official/official /homedepot/yellowsolo/xz/home/home
-z переключатель zip tar одновременно.
Используя расширенные функции glob-оболочки bash (которые по умолчанию включены в текущих установках Ubuntu), с учетом
$ tree A
A
├── B
├── C
│ ├── ac1
│ └── ac2
└── D
5 directories, 0 files
вы можете адресовать все, кроме C и его содержимого, используя выражение glob A/!(C) ie
$ echo A/!(C)
A/B A/D
Итак, в расширенный glob все, кроме каталога C и его содержимого, вы можете просто использовать
rm -rf A/!(C)
, оставив [!d5 ]
$ tree A
A
└── C
├── ac1
└── ac2
3 directories, 0 files
Одним из простых способов было бы использовать trash-cli
, вы можете установить его с установленным sudo apt-get install trash-cli
после установки, вы можете перейти к родительскому каталогу A с помощью cd /A и затем выполните команду trash B D, где B и D - каталоги, которые вы хотите удалить (они попадут в мусорную корзину для диска, на котором они установлены, поэтому, если вы допустили ошибку, вы можете восстановить файлы)
Протестировано под Ubuntu 16.04 и 14.04
Просто используйте петлю for Bash и test, чтобы отфильтровать нужные каталоги и команду rm -rf для рекурсивного удаления каталогов, например:
for x in /path/to/parent/*; do test "$x" != "dir_survive" && rm -rf "$x"; done
. Итерирует все элементы (файлы и каталоги) внутри /path/to/parent/ и удаляет элемент рекурсивно, если его имя не равно dir_survive. Если родительский каталог является текущим каталогом, вы можете писать * в качестве пути.
Если вы не уверены и хотите проверить, какие элементы будут удалены сначала без каких-либо действий, просто замените rm -rf в команде выше с echo, и она выведет только удаленные кандидаты.
Вот пример:
$ tree
.
├── dir1
│ ├── subdir1
│ │ ├── file1
│ │ └── file2
│ └── subdir2
│ ├── file1
│ └── file2
├── dir2
│ ├── subdir1
│ │ ├── file1
│ │ └── file2
│ └── subdir2
│ ├── file1
│ └── file2
└── dir_survive
├── subdir1
│ ├── file1
│ └── file2
└── subdir2
├── file1
└── file2
9 directories, 12 files
$ for x in *; do test "$x" != "dir_survive" && rm -rf "$x"; done
$ tree
.
└── dir_survive
├── subdir1
│ ├── file1
│ └── file2
└── subdir2
├── file1
└── file2
3 directories, 4 files