[CodeFest]코드베틀 문제 - 다단계 디렉터리 밑에 원하는 파일 외에 지우기

jachin의 이미지

http://ftp.sayclub.com/pub/X/KDE/stable/3.5/src/kdebase-3.5.0.tar.bzip 파일을 받아서 압축을 푼 후 .desktop 확장자를 갖는 파일 외에 다른 파일을 지우십시오. 단, 디렉터리 구조는 그대로 남겨두고 .desktop 파일 외에 모든 파일은 다 지워주십시오.

Forums: 
익명 사용자의 이미지

쉘 스크립도 끼워준다면,

find tests -type f | grep -v '\.desktop$' | xargs rm

atie의 이미지

이 문제를 보고 생각이 들었던 것이, 기왕이면 kde svn에서 ko message 파일들을 가져와서 디렉토리 그대로 생성을 하고 그 안에 있는 message들을 msgid, msgstr, where(include all #) 으로 한 파일에 저장하던지 해서, msgid 알파벳 순으로 모니위키 페이지를 만들어 주는 프로그램을 작성하면 생산적이지 않았을까 하는 가였습니다.

계속 접속이 안되서 이제서야 글을 올리게 되었는데 타이밍을 놓친 것 같네요.

----
I paint objects as I think them, not as I see them.
atie's minipage

segfault의 이미지

find | grep '\.desktop$' | xargs zip temp.zip && rm -rf kdebase-3.5.0 && unzip temp.zip && rm temp.zip

대충 이렇게 해서 1등 먹었습니다 :)

yui의 이미지

$ find . -type f -and ! -name "*.desktop" | xargs rm -f 

우연히 2등했습니다.
다른 분보다 다운로드를 빨리한 것이 주효했습니다. :)
익명 사용자의 이미지

문제가 너무 약했네요 >:>

빠르기는 잘 모르겠지만 2등이 더 나은 풀이법 아닌가 합니다.

랜덤여신의 이미지

사실, find 출력 결과에 xargs 를 그냥 쓰면 약간의 버그가 있습니다. :-)

'a b' 라는 파일이 있을 때, 저렇게 하면 rm 'a b' 가 되는 것이 아니라 rm a b 이렇게 되기 때문에, 파일명에 공백이 포함되어 있을 경우 제대로 지워지지 않습니다.
따라서
find -type f -not -iname '*.desktop' -print0 | xargs -0 rm
로 하는게 좋습니다.
인자 구분을 공백이 아니라 \0 문자로 하게 합니다.

또한, find 로 찾은 파일이 너무 많을 경우, 명령행 인자 길이의 한계를 초과하기 때문에, xargs 로는 지워지지 않습니다.
따라서
find -type f -not -iname '*.desktop' -exec rm '{}' \;
이 정도가 괜찮지 않을까 싶군요. ;)

물론, 보통의 경우, 위의 2가지 제약은 별 쓸모가 없습니다. 예제 상황에서도 마찬가지구요.

segfault의 이미지

zip로 압축해서 다시 푸는 제 방식은 그냥 기발하게 만들려고 일부러 꼬아서 코드를 짠거고.

kde 소스트리에 공백 들어가는 파일 이름은 하나도 없어요...

jachin의 이미지

atie wrote:
이 문제를 보고 생각이 들었던 것이, 기왕이면 kde svn에서 ko message 파일들을 가져와서 디렉토리 그대로 생성을 하고 그 안에 있는 message들을 msgid, msgstr, where(include all #) 으로 한 파일에 저장하던지 해서, msgid 알파벳 순으로 모니위키 페이지를 만들어 주는 프로그램을 작성하면 생산적이지 않았을까 하는 가였습니다.

계속 접속이 안되서 이제서야 글을 올리게 되었는데 타이밍을 놓친 것 같네요.

아, 그것은 나중에 KDE 번역 프로젝트 때 시도해보도록 하겠습니다. ^^a

이번 코페 때 문제를 내면서 '분명 쉽긴 할텐데... 다들 쉘 스크립트의 소중함을 모르니... 혹 누군가 쉘 스크립트를 잘 쓰면 모두들 쉘 스크립트의 소중함을 알 것이다.' 라는 취지로 문제를 냈습니다. ^^a

리눅스를 쓰면서 쉘 스크립트에 대한 중요성을 자꾸 까먹게 되어서 저 자신에게도 경각심을 일깨우고자 문제를 냈습니다...

이번엔 프로젝트 시간도 짧고, 행사 진행 시간도 짧을 것 같아서 일부러 '특별한 방법'을 시상범위에서 제외했지만...

tokigun의 방법을 기대하고 있었어용. 앗흥...

만약 이 문제를 윈도우즈에서 해결하려고 했다면 어땠을까요?

Linuxbox 설치한다거나, cygwin, bash 쉘을 사용하지 않고요...

컴파일된 프로그램을 생산할 수 있는 언어를 사용할 때의 코드도,

이번 시상 범위에 넣을 걸 그랬습니다. orz

jin6093의 이미지

시간이 없어서 대충 보고 지나갑니다. 나중에 집에 가서 자세히 고민해야겠습니다. 이런 문제들 괜찮네요. ^^ 문제 내어 주셔서 감사합니다. :)

PSG-01의 이미지

좀 푸신 분들 쉘 코드 설명좀 부탁드립니다.

저같은 쌩초보는 저 코드 이해하기가 어렵습니다. :cry:

P.S : MAN페이지 참조하라는 말은 정중하게 거절하겠습니다.

-----------------------------------
Playlist :

segfault의 이미지

이번에 답이 많이 안 나온 이유는

느려터진데다가 시도때도 없이 끊기는 인터넷 회선 때문이었을겁니다.

다들 소스코드 다운로드받는데 대부분의 시간을 소비한 탓이겠죠.

저야 뭐 다행히 소스코드가 portage distfiles에 들어있어서 다운로드없이 바로 코딩에 들어갈수 있었습니다.

(순전히 운이 좋은거죠)

jachin의 이미지

sigsegv wrote:
이번에 답이 많이 안 나온 이유는

느려터진데다가 시도때도 없이 끊기는 인터넷 회선 때문이었을겁니다.
...

코페때마다 겪는 제일 큰 문제이지요. 다음번에는 정말 이런일이 없도록 조치하겠습니다. -_-a

하지만... IRC IP 충돌은 해결할 수 없을것 같아요. orz 직접 irc 서버를 돌리기 전까진...

khris의 이미지

jachin wrote:
sigsegv wrote:
이번에 답이 많이 안 나온 이유는

느려터진데다가 시도때도 없이 끊기는 인터넷 회선 때문이었을겁니다.
...

코페때마다 겪는 제일 큰 문제이지요. 다음번에는 정말 이런일이 없도록 조치하겠습니다. -_-a

하지만... IRC IP 충돌은 해결할 수 없을것 같아요. orz 직접 irc 서버를 돌리기 전까진...

행사 며칠전에 관리자분들께 그 해당 아이피를 일시적으로 클론킬 갯수를 늘려달라고 하세요.
저도 학교에서 IRC를 쓰는데, IRC접속자가 의외로 수가 많아서 클론킬 갯수를 10개인가로 늘렸습니다.

───────────────────────
yaourt -S gothick elegant
khris'log

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.