Crie o nome do diretório com base em outros outros diretórios

0

Eu tenho diretórios:

  • Foo
  • Taxa

mas também tenho alguns diretórios com nomes como:

  • Ipsum - Lorem
  • Dolor - Sente-se

Se o diretório não contiver um hífen deve ser ignorado Se o diretório contiver um hífen: Mkdir Ipsum; mv Ipsum \ - \ * Ipsum

Isso é possível?

Editar para esclarecimento: Se houver um diretório com um hífen, desejo criar um novo nome de diretório com base no hífen da peça e, em seguida, mover TODOS os diretórios que incluam a parte anterior ao hífen nesse novo diretório.

    
por Aaron Snowden 11.12.2016 / 06:09

2 respostas

2

você pode usar o recurso de expansão de substring bash.

${parameter%%word} Remove matching suffix pattern.

for f in *;do
    mv "$f" "${f%% -*}"
done
    
por 11.12.2016 / 07:13
0

Sim, é possível. Coloque o código como este em um arquivo, digamos fix-dashes.sh (estou no Mac OS, mas isso deve funcionar em outros Unices):

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
trap 'IFS=$SAVEIFS' 0
for i in $@
do
  echo Processing $i
  case $i in
    *-*)
      echo "'$i' has a dash"
      destname=$(echo "$i" | sed 's/ -.*//')
      echo mv "$i" $destname
      mv "$i" $destname
      ;;
  esac
done

Em seguida, bash fix-dash.sh */ renomeará os diretórios conforme você especificou. A barra é importante para que você obtenha apenas nomes de diretórios, caso contrário, arquivos regulares com traços serão afetados.

'O IFS contém os delimitadores para as palavras e os nomes dos arquivos têm espaços que você precisa ajustar.

Gosto de usar o mecanismo de expressão regular limitado de case porque ele simula os REs usados por bash na linha de comando. Nesse caso, somente nomes contendo traços farão com que a renomeação seja executada.

O comando sed faz a transformação, neste caso, substituindo tudo após o primeiro com a string nula.

    
por 11.12.2016 / 06:54

Tags