조건부로 파일을 새 디렉터리로 이동

조건부로 파일을 새 디렉터리로 이동

디렉토리에 100개의 파일이 있고 첫 번째 파일의 일부가 다른 파일과 일치하는 파일만 유지하고 조건이 충족되지 않으면 해당 파일이 없는 모든 파일을 mv합니다. 예를 들어 다음과 같습니다.

 man_xyz_1.txt 
 sig_xyz_1.txt 
 man_abc_1.txt 
 man_ttc_1.txt
 man_ddd_1.txt
 sig_ddd_1.txt

여기서는 man_xyz_1.txt and sig_xyz_1.txt; man_ddd_1.txt and sig_ddd_1.txt파일 이름( ) 부분이 일치하기 때문에 처음 두 파일( ) 만 유지하고 접두사가 붙은 해당 파일이 없기 때문에 다른 디렉터리에 *_xyz_1.txt and *_ddd_1.txtmv( )하려고 합니다 . 어떤 도움이라도 환영합니다. 감사해요,man_abc_1.txt and man_ttc_1.txtsig_*

답변1

이 실행됩니다반대즉, man_*.txt현재 디렉터리의 모든 파일을 살펴보고 sig_해당 파일과 쌍을 이룰 수 있는 모든 파일을 processed디렉터리로 이동합니다. 그런 다음 나머지 파일을 저장해야 하는 위치로 이동할 수 있습니다.

mkdir processed || exit
for name in man_*.txt; do
    if [ -e "sig_${name#man_}" ]; then
        mv "$name" "sig_${name#man_}" processed
    fi
done

매개변수 대체는 ${name#man_}값으로 확장되고 $name해당 man_접두사 문자열을 제거합니다.

이는 processed디렉토리가 존재하지 않는다고 가정합니다.

시험:

$ tree
.
|-- man_abc_1.txt
|-- man_ddd_1.txt
|-- man_ttc_1.txt
|-- man_xyz_1.txt
|-- script
|-- sig_ddd_1.txt
`-- sig_xyz_1.txt

1 directory, 7 files
$ sh script
$ tree
.
|-- man_abc_1.txt
|-- man_ttc_1.txt
|-- processed
|   |-- man_ddd_1.txt
|   |-- man_xyz_1.txt
|   |-- sig_ddd_1.txt
|   `-- sig_xyz_1.txt
`-- script

2 directories, 7 files

관련 정보