Использование 'cp' в скрипте bash

Snap имеет несколько «ограничений». Самый популярный называется «строгим», что сильно ограничивает доступ приложения. Приложение должно явно запрашивать разрешение на доступ к пользовательским файлам, сетевому доступу или процессам. Эти приложения изолированы и поэтому более безопасны.

Тем не менее, некоторые приложения работают в «классическом» ограничении, которое позволяет получить доступ ко всем этим вещам и, следовательно, гораздо менее безопасны.

Подробнее о мгновенном заключении .

0
03.04.2021, 04:39
1 ответ
cp $item > mkdir $map+copy

Итак, >перенаправляет вывод команды, часть, которая напечатана (, обычно на ваш терминал ). Например. lsвыводит список файлов, поэтому ls > list.txtвместо этого выводит этот список в list.txt. Но напр. cp foo barявно открывает файлы fooи bar, но ничего не выводит на терминал.

Таким образом, перенаправление здесь дает вам пустой файл с именем mkdir, но остальная часть команды cp $list $map+copyскопирует файл с именем $listво все, что $map+copyрасширяется до (содержимого переменная $mapи фиксированная строка +copy, объединенные вместе ).

С другой стороны, cat fooоткрывает fooи распечатывает его, и вы можете использовать cat foo > bar, чтобы направить распечатку в файл с именем bar. На самом деле почти то же самое, что и cp foo bar, за исключением того, что cpимеет опции, такие как -aи -p, чтобы также скопировать информацию о владельце и разрешениях.

А в оболочке вы можете объединять строки, просто прикрепляя их друг к другу (без пробелов между ними ). Итак, если вы установите переменные x=foo y=bar, все они выведутfoobar:

echo foobar
echo "foo""bar"
echo "$x$y"
echo "foo$y"
echo "${x}bar"

Это означает, что вы можете просто выполнить "${map}copy"или "$map""copy", чтобы соединить две части.

Вам нужно запустить mkdirотдельно от cp, поэтому, если $mapсодержит foobar, а $itemравно hello.txt, это создаст каталог foobarcopyи скопирует hello.txtв этот каталог:

mkdir -p "${map}copy"
cp "$item" "${map}copy"

(-pуказывает mkdirне ошибаться, если каталог уже существует.)

См.:

по вопросам судебного приказа. (не )двойное -цитирование переменных.


Кроме того,вместо:

list=$( ls )
for item in $list; do

Оболочка может создавать список имен файлов без вызоваls:

for item in./*; do

См.:

1
28.04.2021, 22:54

Теги

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