Описание тега php
$ дерево
.
`-- MainDir
|-- dir1 и
| |-- notes.txt
| |-- some_file-1
| |-- some_file-2
| `-- some_file-3
`-- dir17
|-- README.txt
|-- some_file-1
|-- some_file-2
`-- some_file-3
3 каталогов, файлов: 8.
С помощью команды rsync
:
$ при помощи rsync -а --включить '*.тхт' --исключить '*/*' MainDir/ MainDir/txtFiles/
$ дерево
.
`-- MainDir
|-- dir1 и
| |-- notes.txt
| |-- some_file-1
| |-- some_file-2
| `-- some_file-3
|-- dir17
| |-- README.txt
| |-- some_file-1
| |-- some_file-2
| `-- some_file-3
`-- txtFiles
|-- dir1 и
| `-- notes.txt
`-- dir17
`-- README.txt
6 каталогов, 10 файлов
Команда использует --включить '*.тхт'
, чтобы включить все файлы с .тхт
файла суффикс, и - исключить '*/*'
, чтобы исключить другие файлы. С помощью -А
или --архив
, копия части исходной иерархии, которая копируется создается в пункт назначения.
Выполняется это снова приведет к пустой MainDir/txtFiles/txtFiles
каталог создается. Добавление -м
или , сливовый-с пустыми Дирс
к протоколу rsync
вызов был избежать этого.
Через найти
(в MainDir
):
$ найти . -тип F -имя '*.тхт' ! -путь '*/txtFiles/*' \
-старпома Ш-с 'для n; делать
д="txtFiles/${Н%/*}";
команды mkdir -р "$д" && СР "$П" "$Д"
сделано' ш {} +
Это находит всех файлов, чьи имена играм *.тхт
и не в txtFiles
каталог.
Для каждого найденного имени файла путь каталога часть пути создается под txtFiles
и файл копируется туда.
Единственная разница между rsync и
подход и это, что в rsync
может копировать обычные файлы, что соответствует данное имя (каталоги, именованные каналы и т. д.), и что найти
команды должны быть запущены в рамках MainDir
.