shell - varios - Listar el contenido de un directorio especificado por índices de bucle
mover varios archivos en linux (2)
¡Bien gracias a la sugerencia de Vladimir aquí qué hice para resolver mi problema!
program test_ec
implicit none
integer :: mi,di,iiii,fff
character(len=1024) :: filename
character(len=1024) :: format_string
logical exist
mi=1
CALL chdir(''/media/Hello/ncfiles/GFS'' )
!do di=1,10
do iiii=0,18,6
do fff=0,18,6
format_string = "(A17,i2.2,i2.2,A1,i4.4,A1,i3.3,A8)"
write (filename,format_string) "sub_gfsanl_4_2011",mi,di,"_",iiii,"_",fff,".grb2.nc"
inquire(file=trim(filename), exist=exist)
if (exist) then
write(*,*) ''file exists i can do do whatever i want with this file''
else
write(*,*) ''I did not find that file.''
end if
enddo
enddo
enddo
end program test_ec
Estoy trabajando con la predicción meteorológica numérica nombrada de la siguiente manera:
sub_gfsanl_4_2011MMDD-IIII-FFFF.grb2
-MM significa mes del 01 al 12
-DD significa días del 01 al 31
-IIII significa tiempo de inicialización, el primer y el segundo dígito son por horas, el tercero y el último son por minutos
-FFFF significa hora de pronóstico, el primer y segundo dígito son por horas, el tercero y el último son por minutos
En mi directorio tengo varios archivos para un determinado día de un mes determinado. Un día tiene 4 datos, uno cada seis horas IIII = 0000, 0600,1200,1800.
Lo que trato de hacer es listar todos los archivos de un día determinado, aquí el código f90 que escribí:
program test_ec
implicit none
!==variable declaration==
integer :: mi,di,dil,mil
character*3 :: temp
!==Program instructions==
mil=1
write(temp,''(i2.2)'') mil
read(temp,''(i2.2)'') mi
!convert the month into a two digit value mi=01
! change to directory where the data are stored
CALL chdir(''/media/Hello/ncfiles/GFS'' )
do dil=1,31
!loop over days
write(temp,''(i2.2)'') dil
read(temp,''(i2.2)'') di
! converting day number into a two digit number, store this value into di. ex dil=9 then di=09
CALL execute_command_line( ''ls sub_gfsanl_4_2011${mi}${di}*.nc > yes.txt'' )
!list all files with the correct month and days and store it to yes.txt
end do
end program test_ec
Por alguna razón, a execute_command_line
no parece gustarle la $ for variable ...
No puede usar ${mi}${di}
en shell. Son variables de Fortran, no variables de shell. Debes poner los números en la cadena dentro de Fortran. Use algunos de los métodos establecidos. Fueron tratados aquí muchas veces en convertir enteros a cadenas para crear nombres de archivos de salida en tiempo de ejecución y sus duplicados (ver Relacionado a la derecha).