2001-01-01에서 2020-12-31까지의 순차적 날짜가 이름에 포함 된 수천 개의 파일로 작업하고 있습니다.
이러한 파일의 샘플은 아래에서 볼 수 있습니다.
gpm_original_20010101.nc
gpm_cressman_20010101_cor_method-add_fac-0.5_pass-1_radius-500km.nc
gpm_cressman_20010101_cor_method-add_fac-0.5_pass-2_radius-250km.nc
gpm_cressman_20010101_cor_method-add_fac-0.5_pass-3_radius-150km.nc
gpm_cressman_20010101_cor_method-add_fac-0.5_pass-4_radius-75km.nc
gpm_cressman_20010101_cor_method-add_fac-0.5_pass-5_radius-30km.nc
.
.
.
gpm_original_20010131.nc
gpm_cressman_20010131_cor_method-add_fac-0.5_pass-1_radius-500km.nc
gpm_cressman_20010131_cor_method-add_fac-0.5_pass-2_radius-250km.nc
gpm_cressman_20010131_cor_method-add_fac-0.5_pass-3_radius-150km.nc
gpm_cressman_20010131_cor_method-add_fac-0.5_pass-4_radius-75km.nc
gpm_cressman_20010131_cor_method-add_fac-0.5_pass-5_radius-30km.nc
그리고까지 2020-12-31
. 내가해야 할 일은이 파일들을 년과 월을 기준으로 새 폴더로 재구성하는 것입니다.
디렉토리 트리는 다음 year
과 같이 하위 디렉토리가 있는 로직을 따라야합니다 months
.
2001
01
02
03
04
05
06
07
08
09
10
11
12
2002
01
02
03
04
05
06
07
08
09
10
11
12
등등. 그리고 파일은 파일 이름의 해당 날짜를 기준으로이 디렉토리로 이동해야합니다. 예 : 200101xx
이름에 포함 된 모든 파일 은 2001/01
폴더 로 이동해야 합니다.
bash를 사용하여 이것을 달성하는 가장 간단한 방법은 무엇입니까?
내가 올바르게 이해했다면 제안은 다음과 같습니다.
for i in *.nc; do
[[ "$i" =~ _([0-9]{8})[_.] ]] && d="${BASH_REMATCH[1]}"
mkdir -p "${d:0:4}/${d:4:2}"
mv "$i" "${d:0:4}/${d:4:2}"
done
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다