Копирование файлов из папки, если они есть и в другой папке

Фактически с find вы можете выполнять работу без циклов. Примерно так:

find -iname '*.tar' -maxdepth 1 -exec tar xvf '{}' \;

Логика такая:

  • -iname соответствует файлам с расширением .tar (без учета регистра), а
  • -maxdepth 1 ограничивает соответствие диапазон до глубины 1 (так что ./*/*. tar и т.п. не будут сопоставлены)
  • finally -exec выполняет tar xvf для совпадающих файлов (обратите внимание, что ; и {} необходимо экранировать; дополнительную информацию см. в find (1) )
1
18.12.2016, 22:11
2 ответа

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

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

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

2
27.01.2020, 23:25

Это работает в моем 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
1
27.01.2020, 23:25

Теги

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