다양한 파일 형식의 폴더가 있지만 .img
다음 패턴을 사용하여 확장자가 . 인 파일에 관심이 있습니다.
ppi_noTD_d0_P_76con_0001.img
ppi_noTD_d0_P_104con_0001.img
ppi_noTD_d0_P_150con_0001.img
ppi_noTD_d0_P_201con_0001.img
etc.
변경되는 파일 이름의 유일한 부분은 P_XXX
부분입니다.
두 개의 .txt 파일을 만들었고 각 파일 stable.txt
에는 하위 집합을 별도의 폴더로 이동하는 데 사용할 recurring.txt
하위 집합 목록이 포함되어 있습니다 (P_XXX
안정적인그리고또 그런 일이 일어났어, 각각). 예를 들어, P_76
및 P_201
는 다음에 나열되어 있습니다.안정.txt, 동시에 P_104
및 P_154
목록에 표시됩니다.반복.txt.
for loop
.txt 파일에서 관련 콘텐츠를 반환하여 P_XXX
폴더의 .img
다른 파일 for loop
에서 일치 항목을 검색한 다음 다음 위치로 옮기려고 합니다.안정적인폴더:
for P in $(< stable.txt); do
for f in *"$P"*.img; do
echo mv - "$f" "./stable/$f"
done
done
나열된 올바른 숫자를 반환 P_XXX
하지만 $f
전체 파일 이름은 반환하지 않습니다(비트만 반환 *P_XXX
). 이상하게 도 P_XXX
마지막 .txt 파일의 전체 파일 이름을 반환합니다.ppi_noTD_d0_P_201_con_0001.img
통화에 문제가 있는 것 같아서 $f
파일을 해당 폴더로 이동할 수 없습니다(안정적인그리고또 그런 일이 일어났어).
이 문제를 어떻게 해결할 수 있나요?
편집하다:
이것은 내가 얻는 결과입니다.
*.img ./stable/*P_76
*.img ./stable/*P_86
*.img ./stable/*P_89
*.img ./stable/*P_90
*.img ./stable/*P_91
*.img ./stable/*P_99
*.img ./stable/*P_121
*.img ./stable/*P_128
*.img ./stable/*P_132
*.img ./stable/*P_136
*.img ./stable/*P_140
*.img ./stable/*P_144
*.img ./stable/*P_153
*.img ./stable/*P_156
*.img ./stable/*P_162
*.img ./stable/*P_180
*.img ./stable/*P_203
*.img ./stable/*P_205
*.img ./stable/*P_208
*.img ./stable/*P_211
*.img ./stable/*P_215
*.img ./stable/*P_229
*.img ./stable/*P_250
*.img ./stable/*P_256
mv - ppi_noTD_d0_P_257con_0001.img ./stable/ppi_noTD_d0_P_257con_0001.img
답변1
파일 stable.txt
이 Windows 시스템에서 생성되거나 편집되었을 수 있습니다.새로운 팀캐리지 리턴 + 개행 시퀀스로 표시됩니다(종종 CR
LF
약어 또는 이스케이프 시퀀스를 사용하여 인용됨 \r\n
).
예를 들어 다음 샘플 파일을 가정해 보겠습니다.
printf '%s\r\n' P_76 P_201 >stable.txt
스크립트가 첫 번째 줄을 읽은 후 와일드카드 표현식은 *"$P"*.img
파일 이름에 실제로 캐리지 리턴이 포함되어 있지 않은 한 아무것도 일치하지 않으며, nullglob
유효한 옵션이 없거나 이에 상응하는 옵션이 없는 경우 f
값은 *P_76\r*.img
. 에코 되면 mv - "$f" "./stable/$f"
이 두 CR
문자로 인해 후속 텍스트가 줄 시작 부분에 삽입되어 기존 텍스트를 덮어씁니다.
다음을 사용하여 파일의 CR
LF
개행 순서를 확인할 수 있습니다.
$ cat -v stable.txt
P_76^M
P_201^M
또는
$ od -An -c stable.txt
P _ 7 6 \r \n P _ 2 0 1 \r \n
또는
$ file stable.txt
stable.txt: ASCII text, with CRLF line terminators
다음 방법을 사용하여 Unix, LF 종료 형식으로 변환할 수 있습니다.
$ dos2unix stable.txt