다음 파일이 포함된 폴더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