여러 디렉터리에서 특정 파일 이동

여러 디렉터리에서 특정 파일 이동

다양한 파일 형식의 수천 개의 파일이 포함된 수많은 디렉터리가 있습니다.

dir
 |__ subdir
 |    |__ file.foo
 |    |__ file.bar
 |    |__ file.txt
 |    |__ (...)
 |__  (...)

모든 하위 디렉터리에서 모든 .txt로 이동하는 빠르고 효율적인 방법은 무엇입니까?2줄 이상의 파일이 있는 파일다른 선택된 디렉토리로?

답변1

GNU 시스템에서:

find dir -type f -name '*.txt' -exec awk '
    FNR == 2 {printf "%s\0", FILENAME; nextfile}' {} + |
  xargs -r0 mv -t newdir

(동일한 이름을 가진 파일이 서로 덮어쓰게 될 수 있다는 점에 유의하십시오. GNU를 한 번 호출하면 mv이를 방지할 수 있지만 xargs여러 번 호출하면 문제가 될 수 있습니다.)

답변2

Shell / bash를 사용하면 다음과 같습니다.

move_files_with_line_count()
(
   srcdir="$1"
   destdir="$2"
   suffix="$3"
   minlines="$4"

   cd "$srcdir"
   find . -name "*$suffix" -type f -print0 \
      | while read -r -d $'\0' file; do

         linecnt=$(wc -l "$file" | { read a b; echo $a; }; )

         if [ $linecnt -ge $minlines ]; then

            [ -d "$destdir/${file%/*}" ] \
               || echo mkdir -p "$destdir/${file%/*}"

            echo mv -v "$file" "$destdir/$file"

         fi
   done
)

현재 디렉터리를 복원하도록 ()로 묶었습니다. 의도한 대로 작동하는 경우 "mkdir" 및 "mv" 앞에 있는 "echo"를 제거하십시오.

관련 정보