Як зробити scp-копію прихованих файлів?


63

Я часто використовую SCP для копіювання файлів навколо - особливо файлів, пов’язаних із веб-сайтом. Проблема полягає в тому, що коли я це роблю, я не можу отримати команду копіювати приховані файли (наприклад, .htaccess).

Я зазвичай посилаюся на це:

scp -rp src/ user@server:dest/

Це не копіює приховані файли. Я не хочу , щоб посилатися на цей раз (робити що - щось подібне scp -rp src/.* ...- і це має дивне .і ..наслідки в будь-якому випадку.

Я не бачив нічого на scpсторінці man про "включити приховані файли".

Як я можу це досягти?


Я припускаю, що src/.*також копії src/..(батьківський каталог), правда?
Кен Шарп

Відповіді:


67

Це абсолютно повинно відповідати прихованим файлам. / В кінці джерела пише "кожен файл у цій директорії". Тим не менш, тестування та дослідження дозволяють вам зробити це. Це дурна поведінка.

" Відповідь " полягає в додаванні крапки до кінця джерела:

scp -rp src/. user@server:dest/

Реальний відповідь полягає в використанні Rsync.


Гарний трюк, я цього ще не зрозумів.
cstamas

21
rsync -avz -e ssh --progress src / user @ server: dest /
MikeyB

2
Я не можу відтворити таку поведінку. scp -r source/ host:source2копіює крапкові файли. Працює у OpenSSH 5.1 з 2007 р.
Mikel

3
Зауважте, що додавання в .кінці більше не працює (2019) через проблеми безпеки. Це пояснюється тут: superuser.com/questions/1403473/scp-error-unexpected-filename
Stéphane

25

Ви можете спробувати rsync. Це краще підходить для цієї роботи:

rsync -av src / user @ server: dest /

(І його сторінку керівництва варто прочитати.)


2
Я завжди використовую параметр --progress для rsync, я не можу жити без нього = D
Хофа,

1
@Hofa Я зазвичай використовую -P, оскільки він коротший, вже включає - прогрес, а також включає - часткове, що може мати сенс, якщо я вже зацікавлений у його прогресі ;-)
cstamas

9

Не ставте косу рису після каталогу джерел. Ваш код виглядатиме так:

scp -rp src user@server:dest/

Це створить каталог "src" під "dest" на віддаленій машині, з усіма прихованими файлами. Це, мабуть, не зовсім те, що ви хочете, але воно буде копіювати приховані файли у src.


3

Далі буде вирішено проблему, це було повністю перевірено на нашому постійному інтеграційному середовищі

scp -rp src/. user@server:dest/
example scp -rp /usr/src/code/. content001@172.11.11.11:/usr/dest/code/

Сподіваюся, це допомагає


Після оновлення scp нещодавно це призводить до scp: error: unexpected filename: . . Не забудьте перевірити, чи працює він з вашим розповсюдженням, колег Googler :)
Моріц Фрідріх

1

Щоб скопіювати лише приховані файли, використовуйте цю команду

scp -rp /path_to_copy_hidden/.[!.]* user@host:/path_to_paste/

Фактична гра - це /.[!.]*тег, який посилається на файли, що починаються з .(приховано)


0

Жодне з вищезазначених scp-рішень не працювало для мене. Однак я виявив, що над cygwin працював наступний: scp -r каталог / * host: каталог '*' збігався з усіма видимими файлами та пропускав невидимі.


0

Якщо вхід пароля вимкнено на віддаленій машині, і єдиний спосіб увійти через відкритий ключ, ви можете скористатися цим:

$ rsync -av -s 'ssh -i /path/to/your/private/SSH/key' --progress user1@remote.host:/remote/source/directory/ /local/destination/directory/

Він також копіює приховані файли.

Також зверніть увагу, що "user1" повинен мати дозволи на читання цих файлів, наприклад, ви не можете скопіювати папки ssh інших користувачів цим методом.


0

Оскільки scpпідтримує регулярні вирази, це чудово зробить трюк для вас:

scp -rp src/(*|.*) user@server:dest/


0

Розподілений контроль редакції обробляє приховані файли

З - за уразливості CVE-2018-20685, то /.трюк не може бути більше не використовується з scp. Однак розподілене управління редагуванням, як-от gitабо Hg Mecurial, буде обробляти приховані файли, як і будь-які інші файли. Ось команди для мого улюбленого Hg Mercurial :

server:$ sudo apt install mercurial
client:$ sudo apt install mercurial
client:$ hg init src
client:$ cd src/
client:$ hg addr
client:$ hg com -m "first commit"
client:$ cd
client:$ hg clone src ssh://user@server/dest/

Подальші зміни потрібно буде знову здійснити, client:$ hg com -m "commit message"а потім натиснути за допомогою client:$ hg pushкоманди. Дізнайтеся більше про натискання змін на цьому Hg Mercurial чіт-аркуші .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.