Uma das diferenças fundamentais entre o Windows cmd
e os POSIX shells é quem é responsável pelas expansões de curingas. Shells fazem todas as expansões necessárias antes de iniciar os comandos reais que você pediu. cmd
principalmente passa os padrões de caracteres curinga para os comandos não modificados. (Digo principalmente, pois acho que há exceções, e as variáveis de ambiente são expandidas na maioria das circunstâncias.) Isso faz com que a escrita de rename
funcione com a mesma sintaxe de cmd
, o que é bastante complicado.
Mas há um rename
para Linux - com argumentos completamente diferentes, confira a man page (que é um pouco concisa no meu sistema, e rename
vem do pacote util-linux
no meu sistema, que deve estar amplamente disponível). Sua primeira renomeação seria feita assim:
rename .txt .bak *.txt
Note que o shell faz a expansão *
, então rename
em si acha que foi invocado assim:
rename .txt .bak file1.txt file2.txt file3.txt ...
Então você pode adivinhar a versão de um único arquivo:
rename .txt .bak file1.txt
Se você não quiser usar rename
, mas implementar isso sozinho, poderá criar uma função para isso. Supondo que você queira apenas alterar a extensão do arquivo e renomear um arquivo, veja isto:
$ function chext() {
newext="$1"
file="$2"
newfile="${file%.*}$newext"
echo mv "$file" "$newfile"
}
$ chext .csv test.txt
mv text.txt text.csv
$newfile
é criado usando uma remoção de substring para remover a extensão original e, em seguida, concatena a nova extensão. Você pode estender essa função para lidar com vários arquivos com relativa facilidade.
Quanto à sua pergunta ls
, use a opção -d
. Isso impedirá que ls
liste o conteúdo dos diretórios.
Demo:
$ ls -al
total 536
drwx------ 3 owner users 528384 Jan 7 17:29 .
drwxr-xr-x 126 owner users 12288 Jan 7 17:26 ..
-rw-r--r-- 1 owner users 0 Jan 7 17:28 f1.csv
-rw-r--r-- 1 owner users 0 Jan 7 17:28 f2.csv
-rw-r--r-- 1 owner users 0 Jan 7 17:28 f3.csv
-rw-r--r-- 1 owner users 0 Jan 7 17:28 f4.csv
drwxr-xr-x 2 owner users 4096 Jan 7 17:33 test
-rw-r--r-- 1 owner users 0 Jan 7 17:27 test.csv
Renomear curinga
$ rename .csv .txt f*
$ ls -al
total 536
drwx------ 3 owner users 528384 Jan 7 17:34 .
drwxr-xr-x 126 owner users 12288 Jan 7 17:26 ..
-rw-r--r-- 1 owner users 0 Jan 7 17:28 f1.txt
-rw-r--r-- 1 owner users 0 Jan 7 17:28 f2.txt
-rw-r--r-- 1 owner users 0 Jan 7 17:28 f3.txt
-rw-r--r-- 1 owner users 0 Jan 7 17:28 f4.txt
drwxr-xr-x 2 owner users 4096 Jan 7 17:33 test
-rw-r--r-- 1 owner users 0 Jan 7 17:27 test.csv
Renomeação de arquivo único
$ rename .txt .csv f1.txt
$ ls -al
total 536
drwx------ 3 owner users 528384 Jan 7 17:34 .
drwxr-xr-x 126 owner users 12288 Jan 7 17:26 ..
-rw-r--r-- 1 owner users 0 Jan 7 17:28 f1.csv
-rw-r--r-- 1 owner users 0 Jan 7 17:28 f2.txt
-rw-r--r-- 1 owner users 0 Jan 7 17:28 f3.txt
-rw-r--r-- 1 owner users 0 Jan 7 17:28 f4.txt
drwxr-xr-x 2 owner users 4096 Jan 7 17:33 test
-rw-r--r-- 1 owner users 0 Jan 7 17:27 test.csv
O padrão ls
$ ls -l t*
-rw-r--r-- 1 owner users 0 Jan 7 17:27 test.csv
test:
total 0
-rw-r--r-- 1 owner users 0 Jan 7 17:33 dont_show_me_please
ls
que não inspeciona diretórios
$ ls -ld t*
drwxr-xr-x 2 owner users 4096 Jan 7 17:33 test
-rw-r--r-- 1 owner users 0 Jan 7 17:27 test.csv