누락 된 파일에 대한 관련 질문이 mv
내 질문에 대한 답변으로 나타나지 않습니다. 다음 명령은 파일이있는 작업 디렉토리 내에서 실행되어 파일이 누락되었습니다.
다음으로 $layers
만든 정렬 된 파일 이름 배열이 있습니다 layers=$(ls cropped* | sort -nk1.9)
.
IFS=$'\n';for file in $layers; do echo $file; done
cropped_1.png
cropped_2-a.png
cropped_2-b.png
cropped_2.png
cropped_3-a.png
cropped_3-b.png
cropped_3.png
cropped_4-a.png
cropped_4-b.png
cropped_4-c.png
cropped_4-d.png
cropped_4-e.png
cropped_4-f.png
cropped_4-g.png
cropped_4.png
cropped_5-a.png
cropped_5-b.png
cropped_5.png
--More--
다음 루프를 실행하여 각 파일 이름에서 _ 다음의 모든 항목을 교체했습니다.
i=1;IFS=$'\n';for file in $layers; do echo ${file/#*_*/cropped_$((i++)).png}; done
cropped_1.png
cropped_2.png
cropped_3.png
cropped_4.png
cropped_5.png
cropped_6.png
cropped_7.png
cropped_8.png
cropped_9.png
cropped_10.png
cropped_11.png
cropped_12.png
cropped_13.png
cropped_14.png
cropped_15.png
cropped_16.png
cropped_17.png
--More--
이것은 지금까지 좋아 보였다. 나는 각 파일의 이름을 변경하려고 시도 그래서 mv
내가 좋아하는 뭔가를 초래 하리라는 예상되는 다음과 같은 루프를 사용하여 mv cropped_2-a.png cropped_2.png
다음 mv cropped_2-b.png cropped_3.png
등 :
i=1;IFS=$'\n';for file in $layers; do mv $file ${file/#*_*/cropped_$((i++)).png}; done
이로 인해 첫 번째 파일에 대해 단일 오류가 발생했습니다.
mv : 'cropped_1.png'와 'cropped_1.png'는 같은 파일입니다.
mv SOURCE DEST
일치하는 각 파일 이름에 대해이 오류가 발생한다고 가정했습니다 . 대신 루프의 첫 번째 파일에만 오류가 발생했습니다.
이상한 부분은 이제 많은 파일이 누락되었다는 것입니다. 남은 파일은 다음과 같습니다.
ls cropped* | sort -nk1.9
cropped_1.png
cropped_141.png
cropped_142.png
cropped_143.png
cropped_144.png
cropped_145.png
cropped_146.png
cropped_147.png
cropped_148.png
cropped_149.png
cropped_150.png
cropped_151.png
cropped_152.png
cropped_153.png
cropped_154.png
cropped_155.png
누락 된 파일은 어디로 이동 했습니까?
cropped_2-a.png
총 155 개의 파일을 생성하는 것과 같은 이름으로 몇 개의 중복 파일을 만들기 전에는 140 개의 파일이있었습니다 . 141-155 파일이 성공적으로 이동 된 경우 파일 2-140은 어디에 있습니까? 예상 된 목적지로 이동하지 않는 이유는 무엇입니까? 현재 작업 디렉토리?
와 같은 이름을 가진 파일을 추가하지 않으면 cropped_2-a.png
루프가 각 파일에 대한 오류 메시지를 표시하고 파일은 변경되지 않습니다.
i=1;IFS=$'\n';for file in $layers; do mv $file ${file/#*_*/cropped_$((i++)).png}; done
mv: ‘cropped_1.png’ and ‘cropped_1.png’ are the same file
mv: ‘cropped_2.png’ and ‘cropped_2.png’ are the same file
mv: ‘cropped_3.png’ and ‘cropped_3.png’ are the same file
mv: ‘cropped_4.png’ and ‘cropped_4.png’ are the same file
mv: ‘cropped_5.png’ and ‘cropped_5.png’ are the same file
--More--
나는 cropped_2a.png
(no -
)와 같은 파일 이름으로 테스트 했으며 누락 된 파일 문제를 복제합니다.
mv -v
무슨 일이 일어나고 있는지 확인 하려고 할 때 예상대로 파일 이름을 바꾸는 것처럼 보이지만 확인하면 파일이 누락되었습니다. 매개 변수 대체 1 ${file/#*_*/cropped_$((i++)).png}
을 큰 따옴표로 묶어도이 문제가 해결되지 않습니다.
i=1;IFS=$'\n';for file in $layers; do mv -v $file "${file/#*_*/cropped_$((i++)).png}"; done
‘cropped_2-a.png’ -> ‘cropped_2.png’
‘cropped_2-b.png’ -> ‘cropped_3.png’
‘cropped_2.png’ -> ‘cropped_4.png’
‘cropped_3-a.png’ -> ‘cropped_5.png’
‘cropped_3-b.png’ -> ‘cropped_6.png’
‘cropped_3.png’ -> ‘cropped_7.png’
‘cropped_4.png’ -> ‘cropped_8.png’
‘cropped_5.png’ -> ‘cropped_9.png’
‘cropped_6.png’ -> ‘cropped_10.png’
--More--
대상 mv
인수로 매개 변수 대체를 사용하여 더 간단한 명령 테스트 :
testy="cropped_2-b.png"
mv -iv $testy ${testy/#*_*/cropped_999.png}
이것은 또한 작동합니다 :
i=998
testy="cropped_2-b.png"
mv -iv $testy ${testy/#*_*/cropped_$((i++)).png}
'cropped_2-b.png'-> 'cropped_998.png'
testy="cropped_3-a.png"
mv -iv $testy ${testy/#*_*/cropped_$((i++)).png}
'cropped_3-a.png'-> 'cropped_999.png'
동일한 파일 오류가 표시된 후 for 루프 동안 실패한 이유 또는 파일이 실제로 어디로 이동하는지 확인할 수 없었습니다.
cropped_2-a.png
이름이로 변경되었습니다 cropped_2.png
. 이것은 원본 cropped_2.png
. 그런 다음 2 줄 후에이 파일의 이름이 cropped_4.png
.
이 문제를 피하는 가장 좋은 방법은 번호를 다시 매길 때 파일을 처음에는 비어있는 다른 디렉토리로 이동하는 것이므로 새 이름이 이전 이름과 충돌하는 것에 대해 걱정할 필요가 없습니다. 그런 다음 루프가 완료되면 이름이 바뀐 파일을 원래 디렉토리로 다시 이동할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다