Потрібна допомога щодо вдосконалення сценарію


1

У мене є група папок (L1N-L5N), в які я хочу скопіювати з моєї / home / michael / документи / XXX у свою папку Dropbox. В даний час я використовував такий сценарій:

#!/bin/sh
cp -ra /home/michael/Documents/GeneralNetwork /GNI /home/michael/Dropbox/NetworkData
cp -ra /home/michael/Documents/GeneralNetwork /L1N /home/michael/Dropbox/NetworkData
cp -ra /home/michael/Documents/GeneralNetwork /L2N /home/michael/Dropbox/NetworkData
cp -ra /home/michael/Documents/GeneralNetwork /L3N /home/michael/Dropbox/NetworkData
cp -ra /home/michael/Documents/GeneralNetwork /L4N /home/michael/Dropbox/NetworkData
cp -ra /home/michael/Documents/GeneralNetwork /L5N /home/michael/Dropbox/NetworkData

Це працює, але погано.

Я також не впевнений у міркуваннях, чому це повертається:

cp: cannot stat ‘/GNI’: No such file or directory
cp: cannot stat ‘/L1N’: No such file or directory
cp: cannot stat ‘/L2N’: No such file or directory
cp: cannot stat ‘/L3N’: No such file or directory
cp: cannot stat ‘/L4N’: No such file or directory
cp: cannot stat ‘/L5N’: No such file or directory

Я думав скоротити це:

cp -ra /home/michael/Documents/GeneralNetwork/L*

Або якусь іншу підстановку, щоб забрати всі папки, що містять "L". Мені потрібно скопіювати файли (і перезаписати) у папку цього каталогу, однак я не можу бути впевнений, що вони підпадають під вищевказану схему імен папок.

Який найкращий спосіб створити .sh-файл для копіювання Everythig з ... / GeneralNetwork / * без копіювання прихованих файлів тощо? Я зробив ../GeneralNetwork/. і він включав завантаження, бін, sys тощо.


Якщо між файлами є пробіл, поставте його між цитатами:"/home/michael/Documents/GeneralNetwork /GNI"
blade19899

1
У вас дійсно є каталог, названий "GeneralNetwork "з пробілом в кінці? Чому? Можливо, ваша проблема з копіюванням завантажувального пристрою тощо - це простор; це помилка друку? --- у будь-якому разі, подумайте про використання таких інструментів, як Unison для подібної роботи --- див. наприклад askubuntu.com/a/522423/16395
Rmano

Рмано, вибачте, що це не було друкарської помилки - я навіть не відзначив це, коли я редагував його з LeafPad .. що було дурною помилкою. Це питання було виправлено. Дякую.
DankyNanky

Відповіді:


2

cp: не може stat '/ GNI': Немає такого файлу чи каталогу

Це через пробіл:

cp читає це так:

cp -ra /home/michael/Documents/GeneralNetwork /GNI

Що папку: /home/michael/Documents/GeneralNetworkпотрібно скопіювати /GNI. Але в папці немає /GNI, тому помилка.


Якщо між файлами є пробіл, поставте його між цитатами:

"/home/michael/Documents/GeneralNetwork /GNI"

cp бачить:

/home/michael/Documents/GeneralNetwork

За допомогою цитат він буде читати за межами пробілу:

cp -ra "/home/michael/Documents/GeneralNetwork /GNI" /home/michael/Dropbox/NetworkData

На запит користувача :

Якщо я вас правильно зрозумів, потрібно скопіювати /home/michael/Documents/GeneralNetwork

і все в ньому. Так, це можливо так:

cp -ra "/home/michael/Documents/GeneralNetwork /*.*" /home/michael/Dropbox/NetworkData

Дякую, це мало б логічний сенс. Я доповнюю сценарій і тест. З іншого боку, чи є можливість зробити підстановку, щоб мій "скрипт" просто копіював папку? Тобто, в ідеалі я хотів би просто скопіювати / home / michael / Documents / GeneralNetwork і проігнорувати всі системні файли.
DankyNanky

@MichaelNancarrow, я оновив свою відповідь. Зважаючи на увагу, код знаходиться у верхній частині моєї голови. Я зараз на машині Windows, і не маю можливості перевірити це в системі Linux.
blade19899

@MichaelNancarrow, також зауважте, якщо це відповіло на ваше запитання, зазвичай бажано, щоб він прийняв його як "прийняту відповідь" (прапорець під стрілкою вгору та вниз).
blade19899

1
Лезо, використовуючи . не є дійсною похвалою, чи не так?
DankyNanky

1
@MichaelNancarrow, Використання крапки можна використовувати як дійсну команду, див .: джерело або оператор крапки Man Page | Баш | SS64.com . напр ./script.sh.
blade19899
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.