move apenas arquivos uniq de um diretório para outro [fechado]

0

Eu quero mover os arquivos do diretório A para o diretório B. Mas há algumas condições.

diretório Uma estrutura:

a.txt_20170502 
b.txt_20170502
a.txt_20170507
asd.txt_20170509
asd.txt_20170522

Portanto, desejo renomear a.txt_20170502 para a.txt e mover esse arquivo para o diretório B, mas se a.txt estiver presente no diretório B, ele não moverá esse arquivo.

Exemplo:

a.txt
asd.txt

Esse processo continua até que todos os arquivos candidatos sejam movidos do diretório A para o B.

Estou confuso sobre como posso verificar se os arquivos já estão nesse diretório. Ele não moverá esse arquivo.

Condição : - Há outro script em execução em segundo plano que buscará dados do diretório B. Portanto, se algum arquivo estiver presente no diretório B, ele será automaticamente copiado do servidor de mainframe.

    
por Sagar2311 10.01.2017 / 08:28

2 respostas

2
for file in A/*.txt_*; do
  newfile="B/${file##*/}"  # remove A path, add B path
  newfile="${newfile%_*}"  # remove trailing suffix

  if [[ ! -f "$newfile" ]]; then
    mv "$file" "$newfile"
  fi
done

Isso iterará todos os arquivos em A que corresponderem a *.txt_* . Ele construirá um novo caminho de arquivo substituindo o caminho A pelo caminho B e retirando o sufixo _xxxxxxxx do nome do arquivo. Se o novo nome do arquivo não estiver presente em B , o arquivo será movido para lá.

    
por 10.01.2017 / 09:29
-1

Você pode testar a existência com:

if [!-f B/a.txt]
then
  mv a.txt_20170502 B/a.txt
fi

Você deve substituir a.txt_20170502 e a.txt pelas variáveis usadas em seu script.

    
por 10.01.2017 / 08:33