![한 디렉터리에서 다른 디렉터리로 uniq 파일만 이동 [닫기]](https://linux55.com/image/102760/%ED%95%9C%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%EC%84%9C%20%EB%8B%A4%EB%A5%B8%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EB%A1%9C%20uniq%20%ED%8C%8C%EC%9D%BC%EB%A7%8C%20%EC%9D%B4%EB%8F%99%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
A 디렉터리에서 B 디렉터리로 파일을 이동하고 싶습니다. 하지만 몇 가지 조건이 있습니다.
디렉토리 A 구조:
a.txt_20170502
b.txt_20170502
a.txt_20170507
asd.txt_20170509
asd.txt_20170522
a.txt_20170502
그래서 파일 이름을 바꿔서 a.txt
B디렉토리로 옮기고 싶은데 a.txt
B디렉토리에 해당 파일이 있으면 파일이 이동되지 않습니다.
예:
a.txt
asd.txt
이 프로세스는 모든 후보 파일이 디렉터리 A에서 B로 이동할 때까지 계속됩니다.
파일이 이미 디렉토리에 있는지 확인하는 방법이 혼란 스럽습니다. 파일이 이동되지 않습니다.
건강 상태:- 디렉터리 B에서 데이터를 가져오는 또 다른 스크립트가 백그라운드에서 실행 중입니다. 따라서 디렉터리 B에 파일이 있으면 자동으로 메인프레임 서버에 복사됩니다.
답변1
for file in A/*.txt_*; do
newfile="B/${file##*/}" # remove A path, add B path
newfile="${newfile%_*}" # remove trailing suffix
if [[ ! -f "$newfile" ]]; then
mv "$file" "$newfile"
fi
done
A
이는 일치하는 모든 파일을 반복합니다 *.txt_*
. A
path를 path로 바꾸고 B
파일 이름에서 뒤따르는 접미사를 제거하여 새 파일 경로를 구성 합니다 . _xxxxxxxx
새 파일 이름이 아래에 아직 없으면 B
파일이 해당 위치로 이동됩니다.
답변2
다음을 사용하여 존재 여부를 테스트할 수 있습니다.
if [!-f B/a.txt]
then
mv a.txt_20170502 B/a.txt
fi
a.txt_20170502
및 a.txt
스크립트에서 사용하는 변수로 바꿔야 합니다 .