상대적으로 복잡한 명령줄 파일 일치 패턴에 대해 도움을 줄 수 있는 사람이 있습니까?
다음과 같이 디렉토리에 파일이 있습니다.
1.png
1_thumb.png
1-1.png
1-1_thumb.png
1-2.png
1-2_thumb.png
2.png
2_thumb.png
2-1.png
2-1_thumb.png
3.png
3_thumb.png
3-1_thumb.png
-1
어딘가에 동일한 파일 이름을 가진 복사본이 없는 모든 파일을 나열하고 싶습니다 . 따라서 위의 예에서 결과는 입니다 3.png
.
주의: 도움이 된다면 파일과 "-1"이 포함된 복사본의 파일 크기는 동일합니다.
누구든지 이 작업을 수행하는 방법을 제안할 수 있습니까?
답변1
모든 파일이 -n
복사본이고 엄지 손가락도 원하지 않는다고 가정하면 KornShell(ksh) 및 Bash에서 옵션 extglob
세트( shopt -s extglob
)를 사용하여 작동합니다.
for f in !(*_thumb.png|*-[1-9].png); do
g=${f%.png}-1.png
test -f $g || echo $f
done
답변2
복사본임을 결정하는 것이 "-1"뿐이라면 2-1.png 또는 2-1_thumb.png 파일의 복사본도 없는 것입니다. 이것이 일치 기준이고 엄지손가락도 테스트하고 싶다면 다음을 수행할 수 있습니다.
for i in `ls |grep -v "\-1" | cut -f1 -d.`; do
if `echo $i | grep thumb > /dev/null`; then
test -f `echo $i.png | sed 's/_/-1_/g'` || echo $i.png;
else
test -f $i-1.png || echo $i.png;
fi;
done
그렇지 않고 엄지손가락이 중요하지 않다면 KAK의 답변이 적합해야 합니다.