하위 디렉터리를 새 상위 디렉터리로 이동합니다. 여기서 새 디렉터리 이름은 1씩 증가합니다.

하위 디렉터리를 새 상위 디렉터리로 이동합니다. 여기서 새 디렉터리 이름은 1씩 증가합니다.

이동하는 동안 하위 디렉터리의 이름을 변경하면서 수백 개의 하위 디렉터리 인스턴스를 한 상위 디렉터리에서 다른 상위 디렉터리로 이동하려고 합니다. 내 디렉토리는 숫자 집합입니다.

1000, 1001, 1002, 1003, ..., 1998, 1999

각 디렉터리에는 다음 증분 디렉터리로 이동하고 하위 폴더 이름을 바꾸려는 "old"(예: 1000/old)라는 하위 폴더가 있습니다.

예를 들어 "1000/old"를 "1001/new"로 이동하고 싶습니다.

xargs를 사용해 보았지만 처음 사용하기 때문에 올바른 방향으로 가고 있는지 잘 모르겠습니다. 내가 원하는 것은 다음과 같다고 생각합니다.

find 1* -name 'old' | xargs -i -t mv {} <dir+1>/new

증가(비트)를 구현하는 방법을 잘 모르겠습니다 dir+1.

나는 또한 허용되는 답변을 수정하려고 시도했습니다.이것문제가 있지만 내 수정 사항도 작동하지 않습니다( ls실제로 디렉터리 이동/이름 바꾸기를 시작하기 전에 코드를 테스트했습니다).

#!/bin/bash
for x in 1*; do
  ls -d "$x/old" "${x}$i/new"
  ((++i))
done

위의 문제는 다음 디렉터리가 1001, 1002가 아닌 10001, 10002 등이 되는 것입니다.

어떤 조언이라도 대단히 감사하겠습니다.

답변1

쉘은 10진 정수를 나타내는 문자열을 정수로 처리합니다. 이름 앞에 0이 없이 숫자만 포함된 디렉토리가 있는 경우 숫자가 있고 다음을 수행할 수 있습니다.산수위에.

for d in 1*; do
  mv "$d/old" "$((d+1))/new"
done

스크립트를 더욱 강력하게 만들고 하위 디렉터리가 실제로 존재할 때만 이동을 수행 old하고 필요한 경우 대상을 생성할 수 있습니다.

for d in 1*; do
  if [ -d "$d/old" ]; then
    mkdir -p "$((d+1))"
    mv "$d/old" "$((d+1))/new"
  fi
done

find하위 디렉터리를 재귀적으로 탐색하지 않으므로 여기서는 유용하지 않습니다.

관련 정보