Gostaria de mesclar o conteúdo dessas pastas com uma linha de comando.
.
├── folder1
│ │ file.txt
│
├── folder2
│ │ file.txt
│
└───folder3
│ file.txt
Como posso fazer isso ?
Responder1
Finalmente posso fazer isso com cp
e é--backup
bandeira.
cp --backup=numbered */*.txt new_directory/
Responder2
O seguinte loop de linha de comando copiará o conteúdo (de nível superior) de cada pasta chamada "pasta*" em seu diretório atual para um diretório chamado "novo_diretório". O /*
glob, por padrão, não corresponderá a "arquivos de ponto"; use shopt -s dotglob
se quiser mudar esse comportamento. Se o mesmo nome de arquivo (base) já existir em new_directory, ele prefixa o arquivo de destino com a pasta de origem (e um sublinhado), para torná-lo único.
Tudo em uma linha:
for f in folder*/*; do [ ! -e "new_directory/$(basename "$f")" ] && { cp "$f" new_directory/; continue; }; [ -e "new_directory/$(basename "$f")" ] && cp "$f" "new_directory/$(dirname "$f")_$(basename "$f")"; done
Dividido para facilitar a leitura:
for f in folder*/*
do
[ ! -e "new_directory/$(basename "$f")" ] && { cp "$f" new_directory/; continue; }
[ -e "new_directory/$(basename "$f")" ] && cp "$f" "new_directory/$(dirname "$f")_$(basename "$f")"
done
Se você pretende, em vez disso,moveros arquivos de seus locais originais, basta alterar os cp
's' para mv
's.