Renomeia o arquivo (Prefixo) com o caminho completo?

0

Eu prefixo meus arquivos ( .dat ) assim:

CLY_BIZ_COM_PERD.dat -> 20160622CLY_BIZ_COM_PERD.dat

Eu tentei o seguinte:

key='date "+%Y%m%d"'
for i in $(ls /Path/*.dat); do mv ${i} "${key}${i}" ;done

Mas este comando sufixo meus arquivos e não o prefixa. Como posso fazer isso?

    
por amine tabenyoussef 22.06.2016 / 18:09

1 resposta

4

Duas alterações no seu script atual:

  1. não analisar ls ; em vez disso confie no globbing do shell

  2. porque os arquivos estão em um subdiretório, cd lá primeiro e execute o loop ou use basename e dirname para extrair as partes de diretório e nome do arquivo antes de adicionar o prefixo.

(Nota: eu também mudei o seu "/ Path" para "./Path" porque eu não queria criar um diretório Path / level-root. Mas os mesmos princípios se aplicam.

Para configurar alguns arquivos de amostra:

mkdir Path && cd Path
touch CLY_BIZ_COM_PERD.dat jeff.dat a.dat c\ d.dat
cd ..

Aqui está uma corrida seca:

for f in ./Path/*.dat
do 
  printf "mv '%s' '%s'\n" "$f" "$(dirname "$f")/${key}$(basename "$f")"
done

Saída da corrida a seco:

mv './Path/a.dat' './Path/20160622a.dat'
mv './Path/c d.dat' './Path/20160622c d.dat'
mv './Path/CLY_BIZ_COM_PERD.dat' './Path/20160622CLY_BIZ_COM_PERD.dat'
mv './Path/jeff.dat' './Path/20160622jeff.dat'

Assim que estiver satisfeito, faça isso de verdade:

for f in ./Path/*.dat
do 
  mv "$f" "$(dirname "$f")/${key}$(basename "$f")"
done

... e o resultado:

$ ls -1 Path
20160622a.dat
20160622c d.dat
20160622CLY_BIZ_COM_PERD.dat
20160622jeff.dat
    
por 22.06.2016 / 18:31