LINUX Código para renomear arquivos com prefixo em subpastas

1

Eu quero renomear os arquivos em várias subpastas com um prefixo (por exemplo, renomear "file.tif" com "prefix_file.tif") e não precisar estar na subpasta.

código: para f in / caminho / para / *; do echo mv "$ f" "PRE_ $ f"; feito

dá-lhe isto: mv / caminho / para / arquivo1 PRE_ / caminho / para / arquivo1

em vez disso, quero isso: mv / caminho / para / arquivo1 / caminho / para / PRE_file1

alguma ideia?

    
por Sebastian 12.02.2011 / 02:11

3 respostas

2

prefix="prefix_"
for file in /path/to/*; do
    dir=$(dirname "$file")
    base=$(basename "$file")
    dest="$dir"/"$prefix""$base"
    echo mv "$file" "$dest"  # remove "echo" after testing
done
    
por 12.02.2011 / 02:20
2

Usando o Bash:

for f in /path/to/*
do 
    dir="${f%/*}"
    echo mv "$f" "$dir/PRE_${f/$a\/}"
done

Tudo em uma linha:

for f in /path/to/*; do dir="${f%/*}"; echo mv "$f" "$dir/PRE_${f/$a\/}"; done
    
por 12.02.2011 / 03:12
0

O primeiro comando de Mike funcionou. Eu escrevo aqui em uma linha:

para f in / caminho / para / *; do dir = $ (dirname "$ f"); base = $ (basename "$ f"); dest="$ dir" / "$ prefix" "$ base"; echo mv "$ f" "$ dest"; feito

O segundo comando de Dennis parecia ter a saída errada: path / prefix_path / filename em vez de path / prefix_filename

Pode ser que isso tenha a ver com o fato de os nomes das minhas pastas terem um espaço neles?

oops, aqui está a linha correta:

prefixo="prefixo_"; para f in / caminho / para / *; do dir = $ (dirname "$ f"); base = $ (basename "$ f"); dest="$ dir" / "$ prefix" "$ base"; echo mv "$ f" "$ dest"; feito

    
por 13.02.2011 / 19:10

Tags