Seu
O comandomv * ./new_directoryrealmente funcionará; apenas imprimirá um aviso de que não é possível mover o diretório para dentro dele.
Eu tenho um diretório com muitos arquivos e diretórios nele. Para arrumar tudo, vou colocar todos esses arquivos em um diretório, então eu faria algo assim:
$ ls | wc -l
123
$ mkdir new_directory
$ mv * ./new_directory
No entanto, isso obviamente não funcionará porque, então, ele tentará mover new_directory
para new_directory
. Existe alguma maneira simples de fazer o que eu quero em uma linha sem que eu tenha que copiar e colar todos os arquivos e diretórios nesse diretório?
Um oneliner rápido e sujo.
mv 'ls -A | grep -v new_directory' ./new_directory
Se você está apenas procurando os arquivos (ou seja, não diretórios), então
find . -type f -maxdepth 1 -exec mv {} ./new_directory/ \;
é a solução mais portátil. Para velocidade, você deve mover find e xargs, com -print0 e -0, mas somente se você tiver o GNU find e xargs.
Nas vezes em que tive esse problema, fiz uma das seguintes ações:
$ mkdir ../new-directory
$ mv * ../new-directory/
$ mv ../new-directory .
ou
$ mkdir .new-directory
$ mv * .new-directory/
$ mv .new-directory new-directory
O segundo formulário aproveita o nome de arquivo ignorado que começa com '.'
e:
cd ..
mv old_dir new_directory
mkdir old_dir
mv new_directory old_dir
IOW, não mova o conteúdo para um novo diretório, mas coloque este diretório dentro de um novo diretório.
De maneira semelhante a @ Resposta da Rembrane (embora não seja um one-liner):
for FN in *
do
if [ "<new_dir>" != $FN ] then
mv $FN <new_dir>
done
Isso deve ser 100% portátil - mesmo que find
esteja infelizmente ausente do seu sistema.
Minhas sugestões: Como afirmado por outros, o
mv * ./new_directory
funcionará e descobrirá que a expansão total é curta o suficiente.
Além disso, você pode experimentar esse que aumenta muito o número de arquivos:
find . -type f -maxdepth 1 | xargs -s100000 echo | xargs -iXXX mv XXX new_directory
Explicação
Uso:
find -mindepth 1 -maxdepth 1 \! -name new_directory -print0 | \
xargs -0 -P 100 -I'{}' mv '{}' new_directory
Na página xargs
man:
-P max-procs
Run up to max-procs processes at a time;
Para evitar a mensagem de erro e mantê-la simples:
mv *.* ./new_Folder
fará a mesma coisa, mas evita a mensagem de erro (a menos que você tenha pontos nos nomes das pastas).