para detectar os espaços no arquivo como várias linhas

0

Agora estou desenvolvendo um script para copiar alguns arquivos do diretório A para vários diretórios B seguindo algumas diretivas, o script está funcionando bem, mas quando se trata de arquivos com espaços neles, ele apenas os considera como arquivos múltiplos, por exemplo:

my_super_cool_file_2007039904_11 (3rd copy).pdf

quando o arquivo está neste loop:

for i in $(find $parent -mindepth 1 -maxdepth 1 -type f|cut -c 11-);do
echo "this is the file: $i" 
done

são considerados vários arquivos:

  this is the file: my_super_cool_file_2007039904_11
  this is the file: (3rd 
  this is the file: copy).pdf

Eu tentei substituir o space por \space usando sed 's/ /\ /g' , mas isso não parece resolver meu problema, pois o loop é 3 arquivos diferentes, eu também tive o mesmo problema usando ls e Eu preciso ficar para usar find

    
por Kingofkech 04.10.2017 / 10:47

3 respostas

1

Como você está usando -maxdepth 1 e -mindepth 1 , é melhor fazer apenas um loop simples (em bash ):

for name in "$parent"/*; do
    if [ -f "$name" ]; then
        dir=${name%/*}  # dir=$( dirname "$name" )
        dir=${dir##*/}  # dir=$( basename "$dir" )
        printf 'The directory is "%s"\n' "$dir"
    fi
done

Fazer um loop sobre o resultado de find é geralmente uma prática ruim: Por que o looping é uma má prática de saída?

    
por 04.10.2017 / 11:07
1

Supondo que o cut -c 11- se destina a remover a parte do diretório do caminho do arquivo, com GNU find :

find "$parent" -mindepth 1 -maxdepth 1 -type f -printf \
  'this is the file: %f\n'

Com qualquer POSIX find :

find "$parent/." ! -name . -prune -type f -exec sh -c '
  for file do
    file=${file##*/}
    printf "this is the file: %s\n" "$file"
  done' sh {} +

Mais leitura em:

por 04.10.2017 / 11:05
-1

Coloque as $ (find $ parent -mindepth 1 -maxdepth 1 -type f | cut -c 11-) entre aspas e assim:

 "$(find $parent -mindepth 1 -maxdepth 1 -type f|cut -c 11-)"
    
por 04.10.2017 / 10:51