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
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?
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
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
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
Tags linux