알파벳순 파일 목록의 파일 순서에 따라 변수를 만듭니다.

알파벳순 파일 목록의 파일 순서에 따라 변수를 만듭니다.

저는 bash 쉘 스크립팅 게임을 처음 접했지만 꽤 잘 익숙해졌습니다. 현재 자동 id3 데이터 편집이나 mp3 파일용 스크립트를 작성 중입니다. 현재 id3v2 명령줄 프로그램을 사용하고 있습니다. 제가 녹음한 경찰 스캐너 프로그램의 mp3 파일입니다. 파일번호에 관련된 변수를 만들 수 있는 방법이 없을까 궁금했는데... 이걸 어떻게 표현해야 할지 모르겠네요. 죄송해요, 요즘 머리가 아프거든요. 나는 이것을 이렇게 설명할 수 있다.

따라서 녹음 디렉토리에 있는 경우 녹음 시간이 파일 이름의 일부이기 때문에 쉽게 순서대로 나열할 수 있습니다. 따라서 일반적인 ls 명령은 비슷한 결과를 생성합니다

File_012030.mp3
File_012040.mp3
File_012045.mp3

변수를 사용하여 각 파일의 id3 데이터에 트랙 번호를 할당하고 싶습니다. 내 첫 번째 생각은 해당 디렉토리의 파일 목록에서 해당 위치의 번호를 어떻게든 사용하는 것이었습니다. 그래서 위의 예는 이렇습니다.

File_012030.mp3 <- 01
File_012040.mp3 <- 02
File_012045.mp3 <- 03

이것이 가능한가?

답변1

for 루프와 카운터를 사용하세요.

k=1; for file in *mp3; do
        id3v2 --track "$k" "$file"
        ((k++))
     done

그러면 이름이 로 끝나는 모든 파일과 디렉터리에 대해 반복 mp3되고 각 파일과 디렉터리가 로 저장 됩니다 $file. 그런 $k다음 변수는 각 반복( ((k++))) 마다 증가하므로 $k파일을 처리하는 순서에 따라 파일 번호가 증가합니다. 사용할 수 있습니다 --track "$k". 트랙 번호를 설정합니다.

답변2

다음과 같이 간단할 수 있습니다(개행 문자가 있는 파일 이름에도 작동).

arr=(*)

pwd의 모든 파일 이름은 배열에 저장되며 해당 번호로 액세스됩니다(예: "${arr[2]}".

별표는 echo *ls, try 또는 ls와 매우 유사하며 mp3의 try를 선택하여 echo *.mp3실제로 어떻게 보이는지 확인하는 데 사용됩니다.

다음 명령을 사용하여 모든 파일 목록을 볼 수 있습니다.

printf '%s\n' "${arr[@]}"

그런 다음 루프를 사용하여 각 파일 이름을 처리할 수 있습니다.

for (( i=0 ; i<${#arr[@]} ; i++ )); do
    id3v2 --track "$((i+1))" "${arr[@]}"
done

관련 정보