Я попытался скопировать файл test.txt
к нескольким каталогам с одной командой:
cp ~/test.txt ~/folder1 ~/folder2
Но я не успешно выполнялся. Существует ли способ сделать это в одной команде, таким образом, я могу скопировать файл или даже папку к нескольким каталогам?
cp
может скопировать с многочисленных источников, но не может копия нескольким местам назначения. См. man cp
для большего количества информации
единственная команда удара, которую я знаю, который может копировать/сохранять в несколько мест назначения, tee
.
можно использовать его в случае следующим образом:
tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt
Примечание, что tee
также записи вход к стандартному выводу (stdout). Таким образом, если Вы не хотите это, можно предотвратить его путем перенаправления стандартного вывода к /dev/null
следующим образом:
tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt >/dev/null
Другим способом достигнуть копии к нескольким местоположениям является следующая команда:
find dir1 dir2 -exec cp file.txt {} \;
, Если dir1 или dir2 имеют подкаталоги, в которые Вы не хотите файл, скопированный, добавьте -maxdepth 0
опция:
find dir1 dir2 -maxdepth 0 -exec cp file.txt {} \;
Примечание, что это перезапишет каждый файл в dir1
и dir2
с file.txt
содержание, в дополнение к копированию его. Чтобы только скопировать file.txt
, не влияя на другие файлы в этих каталогах скажите find
только действовать на каталоги:
find dir1 dir2 -type d -exec cp file.txt {} \;
Команда
cp ~/test.txt ~/folder1 ~/folder2
пытается скопировать два файла (~/test.txt
и ~/folder1
) месту назначения folder2
. (И если ~/folder2
будет существовать и будет каталог, то у Вас будет "каталог исключения" предупреждением).
, Если Вы хотите сделать несколько копий файла test.txt
, необходимо использовать цикл или несколько команд...
for i in ~/folder1 ~/folder2; do cp ~/test.txt $i; done
(... и быть осторожными, если у Вас есть пробелы, встроенные в имена файлов, Вам будет нужно заключение в кавычки).
Для копирования целых каталогов необходимо использовать -r
опция:
for i in ~/folder1 ~/folder2; do cp -r ~/folder3 $i; done
это создаст ~/folder1/folder3
и ~/folder2/folder3
со всеми включенными файлами.
Можно создать сценарий справки, или можно сделать это с xargs
и функция печати (в этом случае, echo
):
echo firstDir secondDir | xargs -n 1 cp test
Это сделает каждый каталог как аргумент эти cp
функция, с помощью тест файл в качестве параметра.
После долгого поиска эта работа как Очарование также!
for dir in *; do [ -d "$dir" ] && cp /path/file.txt "$dir" ; done
Это скопирует file.txt к каждому каталогу в Вашем текущем местоположении в терминале.
for dir in *; do [ -d "$dir" ] && cp -rf /path/folder "$dir" ; done
Это скопирует папку в каждый подкаталог в Вашем текущем местоположении в терминале.
я совместно использую его, надеются, что это помогает другим также.
Если Вы хотите скопировать файл test.txt в каждом каталоге в/tmp/target/...
создают тестовую среду:
mkdir /tmp/target
cd /tmp/target
mkdir -v {folder1,folder2,folder3}
touch test.txt
копия это:
find * -maxdepth 0 -type d -exec cp -vi test.txt {} \;
Просто мысль для предоставления изменения ответу Sylvain Pineau
, где dir1
и dir2
не находятся в текущем каталоге.
find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;
здесь находка будет искать dir1
два уровня глубоко, или можно не учесть -maxdepth
параметр для нахождения dir1
во всех папках в текущем каталоге и ниже ее.
Только для файлов без сохранения атрибутов. Отлично, если вы копируете огромные файлы и хотите прочитать их только один раз:
cat file1 >file2 >file3
Для файлов или каталогов
xargs -n 1 cp file1 <<< 'file2 file3'
xargs -n 1 cp -r dir1 <<< 'dir2 dir3'