Como copiar arquivos de forma case insensitive no linux?

alguém sabe de alguma ferramenta que copia arquivos de forma case insensitive (igual no Windows “A == a”… etc…) no Linux?
eu quero copiar a pasta do “Windows” (que tá no install.wim) pro wine mas o cp acaba criando a pasta “Windows”, já que a pasta que o wine criou é a “windows”

eu usei o tar pra isso da seguinte forma:

cd ~/Downloads/windows/
tar cf - * | tar xf - --ignore-case --skip-old-files -C ~/.wine/drive_c/

mas o tar ainda cria a pasta “Windows” :frowning:

O --ignore-case se aplica à seleção inicial de arquivos, não à extração.

Para mudar o nome de arquivos no meio da extração, usa-se o trabalho do --transform='EXPRESSÃO DO SED', que no seu caso seria:

tar -cf - * | tar -xv --transform='s/\(.*\)/\L\1/'

(ou \U em vez de \L para 100% maiúsculas em vez de 100% minúsculas`)


EDIT:
Pelo que estou vendo, você não precisa do Tar especificamente.
No caso, uma alternativa mais simples seria usar $() com o comando tr para processar o nome do arquivo antes de passar ao comando cp:

for i in *; do
cp -r "$i" "$(tr '[:upper:]' '[:lower:]' <<<"$i")"
done

bom, eu vi que na primeira solução vc propos converter tudo pra minúscula ou maiúscula (ou algo do tipo), não é isso que eu queria, eu só queria que os arquivos que já existissem ficassem quietos e que o resto que não existisse fosse copiado (tendo em mente o case insensitive, se existir uma pasta “windows” uma pasta “Windows” não era pra ser criada e o conteúdo que tá dentro dessa pasta “Windows” iria pra dentro da pasta “windows”)

a segunda solução eu não entendi

de qualquer forma meu amigo fez este script

#! env /bin/bash

blabla() {
    echo "from: $1\nto: $2\n"

    if [[ -d "$1" ]]; then
        mkdir -p "$2"

        while read -r file; do
            file2=$(find "$2" -maxdepth 1 -iname "$file")
            if [ -n "$file2" ]; then
                blabla "$1/$file" "$file2"
            else
                blabla "$1/$file" "$2/$file"
            fi
        done < <(ls -1 "$1")
    else
        cp -n "$1" "$2"
    fi
}

que resolve o “problema”, obrigado de qualquer forma

1 Curtida