파일 찾기, 하위 디렉터리 생성 및 이동

파일 찾기, 하위 디렉터리 생성 및 이동

다음 Direcory 트리가 있습니다.

Comb
|
|--- 1.json2
|--- 1.cc.json2.ml
|--- 102.cc.json2.pre2.ml
|--- 1.json2.pre1
|--- 102.json2.pre1

이 결과를 얻으려면 create와 bash가 필요합니다.

Comb
|--|
   |-1
   |  |--- 1.json2
   |  |--- 1.cc.json2.ml
   |  |--- 1.json2.pre1
   |- 102
       |--- 102.cc.json2.pre2.ml    
       |--- 102.json2.pre1  

비슷한 것을 시도했지만 어느 시점에서 파일이 깨지거나 손실됩니다.

for file in *.cc.json2.pre2.ml; do mkdir -- "${file%.cc.json2.pre2.ml}"; mv -- "$file" "${file%.cc.json2.pre2.ml}"; done

for file in *.cc.json2.pre1.ml; do mkdir -- "${file%.cc.json2.pre1.ml}"; mv -- "$file" "${file%.cc.json2.pre1.ml}"; done

답변1

다음 쉘스크립트는 귀하의 질문에 표시된 디렉토리 트리에 대해 작동해야 합니다.

#!/bin/bash

for i in *.*
do
 if test -e "$i"
 then
  tmp="${i%%.*}"
  mkdir -p "$tmp"
  mv -i "$i" "$tmp"
 else
  echo "No file or directory matching '$i'"
 fi
done
  • cd디렉토리를 입력하려면 "디렉토리 변경"을 선택하십시오 .

  • 쉘 스크립트를 작성하십시오.

  • 이름을 지어줘요점이 없어, 예를 들어 shellscript(스스로 움직이는 것을 원하지 않기 때문에)

  • 쉘 스크립트 실행

    bash shellscript
    
  • 디렉토리 트리 상단에 새 파일을 생성하고 쉘스크립트를 다시 실행하려는 경우 "실행 가능하게 만들기"를 원할 수 있습니다.

    chmod +x shellscript
    

    그런 다음 "직접" 실행할 수 있습니다.

    ./shellscript
    

답변2

glob패턴을 사용하여 단순화 할 수 있습니다 . Comb디렉토리 에 있다면 다음과 같은 작업을 수행할 수 있습니다.

mkdir 1 102
mv 1\.* 1/
mv 102\.* 102/

이 간단한 작업에는 루프가 필요하지 않지만 비슷한 형식의 파일이 있는 경우 3.somefile.ml 103.mm.ml 66.anotherfile.json자동화하면 더 잘할 수 있습니다.

names=(`ls -1 | grep -Po "^\d+" | uniq `)
mkdir ${names}
for i in ${names[@]}
do
 mv $i\.* $i        
done

또한 glob패턴을 사용하고 고유 번호가 지정된 각 파일에 대한 폴더를 생성합니다.

답변3

cd Comb
for i in *; do mkdir -p ${i%%.*txt}; mv $i ${i%%.*txt}; done

답변4

당신의 시도는 그리 멀지 않습니다. 자신의 코드를 약간 수정해 보세요.

$ for file in *.cc.json*ml; do mkdir -p ${file%%.*}; mv -v ${file%%.*}.* ${file%%.*}; done
renamed '102.cc.json2.pre2.ml' -> '102/102.cc.json2.pre2.ml'
renamed '102.json2.pre1' -> '102/102.json2.pre1'
renamed '1.cc.json2.ml' -> '1/1.cc.json2.ml'
renamed '1.json2' -> '1/1.json2'
renamed '1.json2.pre1' -> '1/1.json2.pre1'

관련 정보