한 디렉터리에서 다른 디렉터리로 uniq 파일만 이동 [닫기]

한 디렉터리에서 다른 디렉터리로 uniq 파일만 이동 [닫기]

A 디렉터리에서 B 디렉터리로 파일을 이동하고 싶습니다. 하지만 몇 가지 조건이 있습니다.

디렉토리 A 구조:

a.txt_20170502 
b.txt_20170502
a.txt_20170507
asd.txt_20170509
asd.txt_20170522

a.txt_20170502그래서 파일 이름을 바꿔서 a.txtB디렉토리로 옮기고 싶은데 a.txtB디렉토리에 해당 파일이 있으면 파일이 이동되지 않습니다.

예:

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_*. Apath를 path로 바꾸고 B파일 이름에서 뒤따르는 접미사를 제거하여 새 파일 경로를 구성 합니다 . _xxxxxxxx새 파일 이름이 아래에 아직 없으면 B파일이 해당 위치로 이동됩니다.

답변2

다음을 사용하여 존재 여부를 테스트할 수 있습니다.

if [!-f B/a.txt]
then
  mv a.txt_20170502 B/a.txt
fi

a.txt_20170502a.txt스크립트에서 사용하는 변수로 바꿔야 합니다 .

관련 정보