2016-09-01 7 views
2

/Dir2에 존재하지 않는 /Dir1에서 파일을 삭제하려고합니다. 문제는 처음 몇 문자가 일치하지만 마지막 몇 문자는 일치하지 않는다는 것입니다. 예를 들어.끝 문자가 일치하지 않으면 파일 삭제

/Dir1 
abc_def.png 
xyz_xyz.png 

/Dir2 
abc_ghi.png 

"abc"가 일치하는 한 마지막 몇 문자가 다르더라도 파일을 삭제하고 싶지 않습니다. 삭제하려는 유일한 파일은 /Dir2에 없기 때문에 xyz.png입니다. 이 일을 어떻게 하죠? rm 전에 echo을 제거,

cd /Dir1 

for f in *_*; do 
    [[ -f /Dir2/"${f%%_*}"* ]] || echo rm "$f" 
done 

일단 만족 :

+2

'/ Dir2'에'ghi_abc.png' 파일이 대신 있다면 어떨까요? '/ Dir1'의'abc_def.png'는 삭제되지 않습니까? –

+0

정확합니다. 삭제되지 않습니다. 처음 세 글자에 의존하고 싶습니다. – kkd92

+0

'/ Dir1'에있는 파일의 밑줄 앞에서 파일 이름의 처음 부분에 종속 되나요? –

답변

1

,이 코드를 사용할 수 있습니다 먼저 밑줄 전에 (당신의 예에서와 같이) 파일 이름의 일부를 일치시킬 가정.

+0

'd %% '는 무엇을 나타 냅니까? 문자가 무엇이든간에 자리 표시 자와 같습니까? – kkd92

+0

'$ {f %% _ *}'는'$ f'에서 첫 번째 밑줄 뒤에 가장 긴 부분을 제거합니다. – anubhava

+0

아니요, 모든 파일이 에코됩니다. – kkd92