Скопируйте файлы из папки, если они также находятся в другой папке

Учитывая, что folderA содержит эти файлы:

foo bar baz 

и папка B, содержащая:

  • Как получить выход внутри `screen` вне скрипта?
  • Развернуть переменную оболочки без globbing
  • Объявление Баша -p HISTIGNORE приносит бах! Зачем?
  • Простой «переменный» файл Bash
  • удалить дополнительное пространство для плитки из композитного изображения монтажа (ImageMagick)?
  • Как извлечь части строки в переменные?
  •  foo baz foobar qux 

    Как я могу скопировать foo и baz из папкиA в новую папку C?
    Обратите внимание, что я сравниваю только их имена, а не их содержимое.

  • Как показать, что означает псевдоним
  • Как я могу изменить приглашение bash, чтобы показать мой рабочий каталог?
  • Как установить bash_logout для всех пользователей?
  • Список подкаталогов только n уровень глубокий
  • Псевдоним, похоже, не читается из STDIN
  • Создание панели прогресса с «диалогом» из вывода rsync
  • 2 Solutions collect form web for “Скопируйте файлы из папки, если они также находятся в другой папке”

    Используйте цикл for над файлами. Расширение параметров может использоваться для извлечения частей пути:

     #! /bin/bash for file in folderA/* ; do basename=${file##*/} if [[ -f folderB/$basename ]] ; then cp "$file" folderC/"$basename" fi done 

    Вы также можете перебирать файлы в папке B, и я бы рекомендовал, если папка содержит значительно меньше файлов, чем folderA.

    Это работает в моем bash:

     echo "Folder A" ls -l ./foldera/ echo "Folder B" ls -l ./folderb/ echo "Folder C" ls -l ./folderc/ read -p "Press any key to start" duplicates=( "$(find foldera folderb -type f -exec basename {} \; |sort |uniq -d)" ) for file in ${duplicates[@]}; do cp "./foldera/$file" "./folderc/$file" done echo "Script Finish. Folder C" ls -l ./folderc/ 

    Вывод:

     root@debian:# ./bashtest.sh Folder A total 32 -rw-r--r-- 1 root root 8230 Oct 14 01:36 abp.png -rwxr-xr-x 1 root root 8805 Dec 9 01:58 appslist.sh -rwxrwxrwx 1 root root 2682 Nov 14 02:50 cpu.sh -rw-r--r-- 1 root root 898 Oct 11 00:25 tkinter-3.py Folder B total 24 -rw-r--r-- 1 root root 8230 Oct 14 01:36 abp.png -rw-r--r-- 1 root root 898 Oct 11 00:25 tkinter-3.py -rwxr-xr-x 1 root root 595 Oct 28 00:02 yadlist.sh -rwxr-xr-x 1 root root 2455 Nov 16 01:24 yadnotebook.sh Folder C total 0 Press any key to start Script Finish. Folder C total 16 -rw-r--r-- 1 root root 8230 Dec 18 23:55 abp.png -rw-r--r-- 1 root root 898 Dec 18 23:55 tkinter-3.py 
    Linux и Unix - лучшая ОС в мире.