Se você deseja mover tudo, exceto os diretórios, de $SOURCE_DIR
para $TARGET_DIR
, você pode usar este comando:
find "$SOURCE_DIR" -maxdepth 1 -not -type d -exec mv -t "$TARGET_DIR" -- '{}' +
Explicado em detalhes:
find
: A pesquisa de busca de arquivos em um diretório
$SOURCE_DIR
: O diretório para pesquisar
-maxdepth 1
: Não olhe dentro dos subdiretórios
-not -type d
: Ignorar diretórios
- Você também pode usar
-type f
se quiser copiar apenas arquivos estritamente, mas eu prefiro o acima, porque também captura tudo o que não é um arquivo nem um diretório (em particular links simbólicos)
-exec mv -t "$TARGET_DIR" -- '{}' +
: Execute o comando mv -t "$TARGET_DIR" -- FILES...
onde FILES...
estão todos os arquivos correspondentes (obrigado @DavidFoerster)
find ... -exec mv -t "$TARGET_DIR" -- '{}' +
seria mais seguro (caso$TARGET_DIR
não exista um diretório ou a partida comece-
) e mais eficiente (porque não gera um novo subprocesso para cada arquivo correspondente).Eu acho que você deseja mv apenas seus arquivos. Primeiro, vá para o diretório e use este comando, substitua $ TARGET pelo caminho do diretório de destino. Se você deseja copiar seus arquivos, substitua
mv
porcp
.se eu explicar isso,
find . -type f
significa selecionar todos os arquivos e-exec mv {} $TARGET \;
executarmv
comando para todos os itens selecionados.A resposta anterior tem um erro.
mv
Todos os arquivos dentro dos subdiretórios também. A solução rápida é o uso-maxdepth 1
. Em seguida, não recursivamentemv
arquivos dentro de subdiretórios. Abaixo está o correto ..fonte
-type f
não impede a recursão.Abordagem Python
Ao lidar com arquivos recursivamente,
find
é o caminho a percorrer. Nesse caso em particular, não é necessário, mas pode ser usado com-maxdepth 1
outras respostas.O comando python simples também pode fazê-lo. Aqui está um exemplo:
Como isso funciona:
fl=[f for f in os.listdir('.') if os.path.isfile(f)]
itera sobre todos os itensos.listdir('.')
encontrados e testamos se o item é um arquivo usando aos.path.isfile()
funçãoDepois
fl
que a lista de arquivos é criada, usamos amap()
função Essa função usa dois argumentos - uma função e uma lista de itens; ele executará a função que atribuímos a cada arquivo em uma lista. Portanto, aqui temos alambda x:shutil.move(x,'./a_directory')
função anônima que moverá um arquivo para um diretório e, em seguida, temosfl
a lista de arquivos que construímos.Para legibilidade e uso geral, também poderíamos reescrever isso como um script python geral, que recebe dois argumentos - diretório de origem e subdiretório de destino.
E o uso é assim:
fonte
Se você estiver usando zsh em vez de bash, poderá fazer o seguinte:
O
(.)
no final é chamado de qualificador glob; o.
interior significa especificamente corresponder apenas aos arquivos regulares.Fazer um
mv *(.) "$target"
é rápido e prático. No entanto, se você estiver fazendo isso como parte de um script, considere escrever algo como o que Frxstrem e David Forester sugerirammv -t "$target" -- *(.)
, para lidar melhor com casos de canto que podem surgir no uso de outras pessoas.fonte
mv -t "$TARGET" -- "$SOURCE"/*(.)
seria mais seguro (no caso de"$TARGET"
começar com-
um diretório ou não). Eu gosto da solução zsh!Para mover tudo, exceto os diretórios de
source-dir
diretório paradestination-dir
diretório, no Python:Consulte Executando arquivo Python no terminal .
fonte
import mypackage
antesfrom mypackage import ...
from __future__
importações especiais e asfrom pathlib
importações comuns .import module
deve ser o primeiro (que é importações partido biblioteca e terceiros)from module import object
deve ser passado (específica local / biblioteca)Eu usaria
isso funcionará desde que suas pastas não tenham extensões.
fonte