2012-09-26 5 views

답변

1

단일 확장 패턴으로는 가능하지 않습니다. 대신 필터링 grep를 사용할 수 있습니다

ls -d '*foo*' | egrep -v '^foo|foo$' | xargs rm 

그래서 foo를 포함하는 ls 목록의 모든 다음 egrep가 시작/끝 부분에 일치와 파일을 제거하고, 마지막으로 xargs 각에 (이 경우 rm) 명령을 실행 나머지.

The dangerous thing about this technique 파일 이름에 줄 바꿈이나 별표와 같은 특수 문자가 포함될 수 있으므로 사용상의 위험은 따릅니다.

6
rm ?*foo?* 

는 foo에 포함 된 파일은 삭제되지 않습니다 적어도 하나 개의 전후 문자, 그래서 "는 foobar"와 "barfoo"가 "barfoobar"반면 될 것입니다,이 있다는 것을 제공 제거합니다. 예방 조치로

는 잘못된 물건을 삭제되지 않도록하기 위해

ls ?*foo?*

을한다. 그리고 우연히 어떤 공백도 포함하지 않도록주의하십시오. rm? * foo? *은 거의 확실하게 매우 나쁩니다. 보호를 제공하려면 따옴표로 묶으십시오. 따라서

rm "?*foo?*" 
+0

어떨까요 foobarfoobarfoo – femchi

+1

어가 오래된 foobarfoobarfoo 역설 :-) 나는 OP가 그 삭제를 원할 것이라고 생각하고 있습니다. – pinoyyid

+0

:))))이 문제에 대한 해결책이 있습니까? – femchi

관련 문제