AllData
다음과 같은 파일이 포함된 디렉터리가 있습니다 .
AllData
|____ file_1to1000.track
|____ file_1001to2000.track
|____ file_2001to3000.track
파일명을 기준으로 해당 파일명으로 디렉터리를 생성했습니다.
for file in *; do dir=$(echo $file | cut -d. -f1); mkdir -p $dir; mv $file $dir; done
그 안에 다른 디렉토리를 만들고 파일을 보관하고 싶습니다. 다음과 같아야 합니다.
AllData
|__ file_1to1000
|___ cuffcompare
|____ file_1to1000.track
|__ file_1001to2000
|___ cuffcompare
|____ file_1001to2000.track
|__ file_2001to3000
|___ cuffcompare
|____ file_2001to3000.track
파일을 위 디렉터리로 옮긴 후에는 파일 이름 file_1to1000.track
이 에서 로 변경되어야 합니다 soft.track
. 디렉터리의 모든 파일은 원래 파일 이름에서 으로 변경되어야 합니다. soft.track
기본적으로 다음과 같아야 합니다.
AllData
|__ file_1to1000
|___ cuffcompare
|____ soft.track
|__ file_1001to2000
|___ cuffcompare
|____ soft.track
|__ file_2001to3000
|___ cuffcompare
|____ soft.track
답변1
확인하다:
for file in ./*; do
echo mkdir -p "${file%.*}"/cuffcompare/ && \
echo mv "$file" "$_"soft.track
done
라이너로:
for file in ./*; do echo mkdir -p "${file%.*}"/cuffcompare/ && echo mv "$file" "$_"soft.track; done
참고: echo
테스트 실행 결과가 만족스러우면 위 항목을 삭제하세요.
${file%.*}
파일 이름에서 일치하는 가장 짧은 접미사를 제거합니다. 그래서 .track
여기서는 파일 이름 끝부터 자르기 시작합니다. 모두 다 아는매개변수 확장
$_
이전 명령의 마지막 인수를 대체합니다(참조:쉘 특수 매개변수);다음으로 확장 "${file%.*}"/cuffcompare/
;
따라서 발견된 각 파일에 대해 mkdir
다음 디렉토리( -p
또는 존재하지 않는 경우 상위 디렉토리를 생성하는 데 상위 디렉토리가 사용됨) 구조가 생성됩니다.
└── file_2001to3000
└── cuffcompare
그런 다음 mv
파일을 다음 soft.tarck
이름의 관련 디렉터리로 이동하고 이름을 바꿉니다.
└── file_2001to3000
└── cuffcompare
└── soft.track