Usando xargs com comando mv e mkdir no Linux

Usando xargs com comando mv e mkdir no Linux

Estou tentando criar um diretório usando o comando mkdir. No entanto, gostaria de mover um subconjunto de arquivos para esse diretório. Eu entendo que posso usarxargs, no entanto, minhas tentativas falharam. Por exemplo, eu tentei mkdir test | xargs -i mv test.text {}. Ele cria o diretório, mas não move o arquivo test.txtpara ele depois de criado.

Responder1

mkdirnão produz nada, portanto xargsnão fará nada de útil. Não entendo exatamente o que você quer fazer, então você deve explicar melhor sua pergunta.

"gostaria de mover um subconjunto de arquivos para esse diretório" -> os arquivos neste subconjunto compartilham uma ou mais características? Se sim, use oencontrarcomando assim:

find [conditions] -exec mv "{}" dirname \;

Se quiser evitar digitar o nome do diretório duas vezes, ou se estiver fazendo isso a partir de um script, você pode fazer algo como

dirname=test
mkdir $dirname && mv filename $dirname

Responder2

Não acho que mkdir produza nenhuma saída para canalizar para xargs.

Fazer "mkdir test1 test2 testhello3 | grep hello" não produz nenhuma saída, enquanto fazer "ls | grep hello" me mostrará "testhello3".

Você pode produzir as pastas primeiro e depois usar ls, grep e xargs para fazer isso?

ls | grep (unique search to get folder name) | xargs -i mv test.txt {}

Talvez mais informações sobre os critérios de movimentação de arquivos e outros sejam úteis.

Responder3

Meu palpite, próximo à resposta do usuário49740:

mkdir test && find -type f -name 'test.*' -exec mv {} test \;

quantos diretórios diferentes você deseja criar?

informação relacionada