파일이 다른 폴더에도 있는 경우 폴더에서 파일을 복사합니다.

파일이 다른 폴더에도 있는 경우 폴더에서 파일을 복사합니다.

다음 파일이 포함된 폴더A를 고려하세요.

foo
bar
baz

폴더 B에는 다음이 포함됩니다.

foo
baz
foobar
qux

폴더 A에서 새 폴더 C로 복사 foo하는 방법은 무엇입니까 ? 내용이 아니라 이름만 비교하고 있다는 점에 유의하세요.baz

답변1

파일에 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

이것은 내 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

관련 정보