Каталог / dev содержит системные устройства. / dev / stdin - это ссылка. На что это указывает?

Настройка, выполненная в моем ящике Vagrant:

$ mkdir -p test/20{1512,16{01..12}}
$ for d in !$; do printf 'I am a csv file in %s\n' "$d" > "$d"/foo.csv; printf 'I am a different file; do not copy me!\n' > "$d"/abc.csv; done

Структура каталогов после настройки:

[vagrant@localhost ~]$ tree test
test
├── 201512
│   ├── abc.csv
│   └── foo.csv
├── 201601
│   ├── abc.csv
│   └── foo.csv
├── 201602
│   ├── abc.csv
│   └── foo.csv
├── 201603
│   ├── abc.csv
│   └── foo.csv
├── 201604
│   ├── abc.csv
│   └── foo.csv
├── 201605
│   ├── abc.csv
│   └── foo.csv
├── 201606
│   ├── abc.csv
│   └── foo.csv
├── 201607
│   ├── abc.csv
│   └── foo.csv
├── 201608
│   ├── abc.csv
│   └── foo.csv
├── 201609
│   ├── abc.csv
│   └── foo.csv
├── 201610
│   ├── abc.csv
│   └── foo.csv
├── 201611
│   ├── abc.csv
│   └── foo.csv
└── 201612
    ├── abc.csv
    └── foo.csv

13 directories, 26 files
[vagrant@localhost ~]$ cat test/201609/foo.csv 
I am a csv file in test/201609
[vagrant@localhost ~]$ 

Затем из моего собственного ящика (не ящика Vagrant):

rsync -ame 'ssh -p 2222' -f '+ */' -f '+ foo.csv' -f '- *' vagrant@127.0.0.1:/home/vagrant/test .

Результат:

$ find test
test
test/201512
test/201512/foo.csv
test/201601
test/201601/foo.csv
test/201602
test/201602/foo.csv
test/201603
test/201603/foo.csv
test/201604
test/201604/foo.csv
test/201605
test/201605/foo.csv
test/201606
test/201606/foo.csv
test/201607
test/201607/foo.csv
test/201608
test/201608/foo.csv
test/201609
test/201609/foo.csv
test/201610
test/201610/foo.csv
test/201611
test/201611/foo.csv
test/201612
test/201612/foo.csv

Примечания к rsync Параметры :

Здесь снова используется команда:

rsync -ame 'ssh -p 2222' -f '+ */' -f '+ foo.csv' -f '- *' vagrant@127.0.0.1:/home/vagrant/test .

-a - переключатель «архивировать», означающий, что каталог копируется рекурсивно, разрешения сохраняются и т. Д.

-m означает, что любые пустые каталоги не будут скопированы (например, если один из каталогов даты отсутствует foo.csv , мы не создаем этот каталог).

-e 'ssh -p 2222' просто потому, что я использую Vagrant box, у которого SSH на другом порту, чем 22; вы можете опустить эту часть.

-f вводит правила «фильтрации». Вы можете включать или исключать файлы. Фильтры, которые я использовал, должны быть достаточно понятными, но чтобы прояснить фильтр '+ * /' , нам нужно включить все каталоги, чтобы файлы foo.csv были быть достигнуто .

Подробнее об этом на странице руководства по адресу:

LESS='+/INCLUDE\/EXCLUDE PATTERN RULES' man rsync
2
07.03.2017, 00:03
1 ответ
  1. @ обозначает символическую ссылку. Ваш ls , вероятно, является псевдонимом для ls -F (и дополнительных флагов). Если вы unalias ls или явно выполните / bin / ls , вы не увидите декорации типа файла.
  2. Выполните ls -l / dev / stdin , чтобы увидеть цель символьной ссылки.
  3. В Linux / dev / stdin ссылается на / proc / self / fd / 0 ( / dev / stdin - это ссылка на / dev / fd / 0 и / dev / fd - это ссылка на / proc / self / fd ). / proc / self - это каталог на procfs , где ядро ​​предоставляет информацию о вызывающем процессе (т.е. каждый процесс получает информацию о себе при чтении из / proc / self ). Подкаталог fd содержит запись для каждого дескриптора открытого файла в процессе, который представляет собой (несколько магическую) символическую ссылку, указывающую на файл, открытый процессом.
3
27.01.2020, 22:03

Теги

Похожие вопросы