같은 이름의 파일을 디렉터리로 이동하고 디렉터리 이름에 카운트된 숫자를 씁니다.

같은 이름의 파일을 디렉터리로 이동하고 디렉터리 이름에 카운트된 숫자를 씁니다.
find /volume1/file/* -type f \( -name "*DF*" -a -name "*LIVE*" \) -print0 | while IFS= read -d '' file
do
    # extract the name of the directory to create
    dirName="${file%.E*}"
    count=$(find "$file" -type f | wc -l;)
    # create the directory if it doesn't exist
    [[ ! -d "$dirName$count" ]] && mkdir "$dirName$count"

    mv "$file" "$dirName$count"
done

안녕하세요,

다른 인코더의 쉘 스크립트를 사용하고 있는데 더 많은 기능을 추가하고 싶었지만 작동하지 않아서 수정했습니다.

부품 수정count=$(find "$file" -type f | wc -l;)

예를 들어 내 리눅스 하드 드라이브에는 약 10,000개의 파일이 있는데, 이 10,000개의 파일 중에서 ".E" 앞에 있는 파일 헤더를 읽고 해당 헤더로 디렉터리를 생성하여 파일을 이동합니다. 여기서는 해당 디렉터리의 파일 수를 디렉터리 이름에 입력하고 싶습니다.

EX)
artist.E01.DF.LIVE
artist.E02.DF.LIVE
artist.E03.DF.LIVE
artist.E04.DD.LIVE
directory name = "artist3"

이렇게 하고 싶지만 수정된 스크립트를 사용하면 1개만 계산됩니다.

답변1

(1) 어디서, 무엇을 검색하고 싶나요? find "$file" -type f이름이 지정된 경로 아래의 모든 파일을 찾습니다 $file. 하지만 이것은 하나의 파일이므로 한 번만 찾을 수 있으므로 얻는 개수는 항상 1입니다.

$file(2) 아래 이름의 파일을 검색하려고 할 수도 있지만 /volume1/file/파일이 4개라면 첫 번째 파일을 이동한 후에는 3개만 남게 되므로 디렉터리 이름이 달라지게 됩니다.

(테스트되지 않은) 다음과 같은 것을 원할 수도 있습니다.

find /volume1/file/* -type f \( -name "*DF*" -a -name "*LIVE*" \) -print0 | while IFS= read -d '' file
do
    # extract the name of the directory to create
    dirName="${file%.E*}"
    if test -d "$dirName"*; then
      dirName="$dirName"*
    else
      count=$(find /volume1/file/* -name "$dirName*" -type f | wc -l)
      dirName="$dirName$count"
      mkdir "$dirName"
    fi
    mv "$file" "$dirName"
done

관련 정보