como posso mover arquivos por tipo recursivamente de um diretório e seus subdiretórios para outro diretório?
<p>qual seria uma boa maneira de mover um tipo de arquivo de um diretório e de todos os seus subdiretórios?</p><p>como "mova todos * .ogg em/thisdir recursivamente para/somedir". eu tentei algumas coisas; meu melhor esforço foi (ainda não tão bom):</p><pre><code>find /thisdir -type f -name '*.ogg' -exec mv /somedir {} \; </code></pre><p>ele retornou em cada linha antes de cada nome de arquivo,</p><pre><code>mv: cannot overwrite non-directory `/thisdir/*.ogg' with directory `/somedir' </code></pre>
<p>você pode usar find com <a href="http://en.wikipedia.org/wiki/xargs">xargs</a> para isso</p><p><code>find /thisdir -type f -name "*.ogg" -print0 | xargs -0 -imysongs mv -i mysongs /somedir</code></p><blockquote> <p>o comando -i no comando acima informa ao xargs qual string de substituição você deseja usar (caso contrário, adiciona os argumentos ao final do comando).</p> </blockquote><p>or<br> no seu comando, tente mover '{}' após o comando <code>mv</code>.</p><p><code>find /thisdir -type f -name '*.ogg' -exec mv -i {} /somedir \;</code></p>
<p>uma pequena nota é que você poderia usar as duas vezes para fazer o comando não mover os dados (assumindo que os dois caminhos estejam no mesmo sistema de arquivos).</p><pre><code>ln /some/path/file /another/path/ &amp;&amp; ln -sf /another/path/file /some/path/ </code></pre><p>mas eu suponho que você deseja mover o conteúdo de/alguns/path/para um outro disco e, em seguida, criar links para os novos arquivos de modo "ninguém".</p><pre><code>for f in `ls /some/path/`; do ln /some/path/$f /another/path/ &amp;&amp; ln -sf /another/path/$f /some/path; done </code></pre><p>envolvendo-o em uma função bash:</p><pre><code>function cpln { for f in `ls $1` do ln $1/$f $2 &amp;&amp; ln -sf $2/$f $1 done } </code></pre> <p>você pode mover a pasta c:\users inteira para uma unidade diferente com bastante facilidade após a instalação do windows:</p><p><strong> aviso: isso pode causar problemas se/quando você precisar executar uma restauração do sistema </strong></p><ol> <li>inicialize na mídia de instalação e acesse o prompt de comando ( <a href="http://www.sevenforums.com/tutorials/682-command-prompt-startup.html">pressione shift + f10 na caixa de diálogo de instalação</a> )</li> <li>use robocopy para copiar c:\users para d:\users: <code>robocopy c:\users d:\users /mir /xj /copyall</code><br> uma. <code>/mir</code> diz ao robocopy para espelhar os diretórios, isso copiará todos os arquivos<br> b. <code>/xj</code> é muito importante, isto diz à robocopy para não seguir os pontos de junção. se você esquecer isso, terá muitos problemas.<br> c. <code>/copyall</code> copiará todos os atributos, incluindo informações da acl e do proprietário</li> <li>verifique se os arquivos copiados com sucesso</li> <li>excluir c:\usuários</li> <li>crie uma junção que aponte para d:\users: <code>mklink c:\users d:\users /j</code></li> </ol><p>é isso aí. eu tenho usado esse processo desde que o vista foi rtm sem problemas.</p><p>aqui está um <a href="http://caskater4.blogspot.com/2007/09/moving-your-data-where-you-want-in.html">artigo</a> que também explica. basta usar robocopy em vez de xcopy, como ele faz no artigo, para evitar possíveis problemas de permissões de ntfs.</p><p>atualização: como descobri da maneira mais difícil, pensei em mencionar também que, se você planeja mover "dados do programa" ou "arquivos de programa" com esse método, ficará desapontado ao descobrir que tudo funciona como esperado , mas as atualizações do windows não serão mais instaladas. não tenho certeza se isso foi corrigido no win 7.</p><p>atualização 2: @benjol possui um <a href="http://benjol.blogspot.com/2009/05/moving-users-folder-in-vista.html">postagem no blog</a> que detalha um método de mover a pasta profiles que recriará as junções que esse método deixa de fora. se você tiver algum problema com aplicativos herdados, dê uma olhada aqui e veja se o método dele resolve o problema.</p> <p>se você quiser renomear uma ramificação enquanto apontava para qualquer ramificação, faça:</p><pre><code>git branch -m &lt;oldname&gt; &lt;newname&gt; </code></pre><p>se você quiser renomear o ramo atual, você pode fazer:</p><pre><code>git branch -m &lt;newname&gt; </code></pre><p>uma maneira de lembrar disso é que <code>-m</code> é para &quot;move&quot; (ou <code>mv</code>), que é como você renomeia os arquivos.</p> <p>sempre use <code>rsync</code> para copiar arquivos, porque é ótimo.</p><p>para ignorar arquivos existentes:</p><pre><code>rsync --ignore-existing --recursive /src /dst </code></pre><p>leia o <a href="http://linux.die.net/man/1/rsync">manual</a> e pesquise muitos exemplos excelentes. especialmente a combinação com o ssh faz com que <code>rsync</code> seja uma ótima ferramenta para conexões lentas e não confiáveis, devido à sua <code>--partial</code> opção. adicionar <code>--verbose</code> para ver quais arquivos estão sendo copiados. verifique também a infinidade de opções relacionadas à preservação de permissões, usuários e registros de data e hora.</p> oi como vai? bom eu acho que vc que saber por exemplo eu coloco um dvd de musicas no pc e depois o pen drive, vc clicar com o lado direito do mouse e vai aparece um nome envia para ai vc envia para seu pen drive lembre que somente quem tem permissão no arquivo ou diretório poderá alterar as permissões, quando ocorrer erros, verifique seus direitos sobre o arquivo ou diretório com o comando "ls -l" ou faça com poderes de root. 

tendo em mente que o conceito de binário significa 0 = desligado e 1 = ligado, vejamos como fica na tabela abaixo:


 rwx
 0 - 000
 1 - 001
 2 - 010
 3 - 011
 4 - 100
 5 - 101
 6 - 110
 7 - 111



onde "rwx" são as permissões de um arquivo, ou seja:


 r=read (leitura)
 w=write (gravação, alteração, deleção)
 x=execute (execução)



feito isso, sabemos que um arquivo ou diretório possui 3 modos de permissão. uma permissão para o dono do arquivo ou seja, quem o criou, uma outra permissão para o grupo do usuário dono do arquivo, e outra permissão para qualquer outro usuário ou grupo. 

sabendo disso, temos a tabela final abaixo:


 dono grupo outros
 rwx rwx rwx
 0 - 000 000 000
 1 - 001 001 001
 2 - 010 010 010
 3 - 011 011 011
 4 - 100 100 100
 5 - 101 101 101
 6 - 110 110 110
 7 - 111 111 111



exemplo: temos um diretório qualquer chamado mp3 que eu quero permissão total para o dono [eu], permissão de apenas leitura para o meu grupo e nenhuma permissão para o resto do mundo. o comando para executar essa ação é o chmod (em minúsculo mesmo). 

$ chmod 740 /mp3 <p>para encontrar os 10 maiores arquivos (linux/bash):</p><p><code>find . -type f -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -i{} du -sh {}</code></p><p>para encontrar os 10 maiores diretórios:</p><p><code>find . -type d -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -i{} du -sh {}</code></p><p>a única diferença é <code>-type {d:f}</code>.</p><p>manipula arquivos com espaços nos nomes e produz tamanhos de arquivos legíveis por humanos na saída. maior arquivo listado por último. o argumento a seguir é o número de resultados que você vê (aqui os 10 maiores).</p><p>existem duas técnicas usadas para manipular espaços em nomes de arquivos. o <code>find -print0 | xargs -0</code> usa delimitadores nulos em vez de espaços, e o segundo <code>xargs -i{}</code> usa novas linhas ao invés de espaços para finalizar itens de entrada.</p><p>exemplo:</p><pre><code>$ find . -type f -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -i{} du -sh {} 76m ./snapshots/projects/weekly.1/onthisday/onthisday.tar.gz 76m ./snapshots/projects/weekly.2/onthisday/onthisday.tar.gz 76m ./snapshots/projects/weekly.3/onthisday/onthisday.tar.gz 76m ./tmp/projects/onthisday/onthisday.tar.gz 114m ./dropbox/snapshots/weekly.tgz 114m ./dropbox/snapshots/daily.tgz 114m ./dropbox/snapshots/monthly.tgz 117m ./calibre library/robert martin/cc.mobi 159m ./.local/share/trash/files/funky chicken.mpg 346m ./downloads/the walking dead s02e02 ... (dutch subs nl).avi </code></pre> <p><strong> para uma lista de arquivos a serem empurrados, execute: </strong></p><pre><code>git diff --stat --cached [remote/branch] </code></pre><p><em> exemplo: </em></p><pre><code>git diff --stat --cached origin/master </code></pre><p><strong> para o diff do código dos arquivos a serem enviados, execute: </strong></p><pre><code>git diff [remote repo/branch] </code></pre><p><strong> para ver os caminhos completos dos arquivos que serão alterados, execute: </strong></p><pre><code>git diff --numstat [remote repo/branch] </code></pre><p>se você quiser ver estes diffs em uma gui, você precisará configurar o git para isso. veja <a href="https://stackoverflow.com/questions/255202/how-do-i-view-git-diff-output-with-visual-diff-program">como vejo a saída 'git diff' com um programa de diferenças visuais?</a> .</p> <p>redirectmatch de mod\_alias ​​não é tão poderoso quanto mod\_rewrite. se você tiver mod\_rewrite no seu host (pretty permalinks use-o, por exemplo), você poderá fazer o redirecionamento somente se o url não estiver no formato de link do arquivo.</p><p>para testar esse caso, há <a href="http://httpd.apache.org/docs/2.0/mod/mod\_rewrite.html#rewritecond"><code>rewritecond</code></a> e para fazer o comando de redirecionamento, existe o <a href="http://httpd.apache.org/docs/2.0/mod/mod\_rewrite.html#rewriterule"><code>rewriterule ... [r=301]</code></a> diretiva.</p><p>um exemplo baseado em seus dados:</p><pre><code>rewritecond %{request\_uri} !^/((20|19)[0-9]{2})/([0-9]{2})/[0-9]{2}$ [nc] rewriterule ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ http://&lt;domain&gt;/$4 [r=301,l] </code></pre><p>isso não foi testado, mas acho que deveria fazer o trabalho. eu usei o quantificador ({2}) para especificar melhor quantos números você espera. ao lado disso, no rewritecond eu criei um padrão que combina apenas com os 20 .. e 19 .. anos.</p><p>a primeira linha (a condição, <code>rewritecond</code>) verifica se não corresponde a uma url de arquivamento e, somente se não corresponder, a regra para fazer o redirecionamento será executada. o <code>rewriterule</code> basicamente faz o mesmo que a sua diretiva <code>redirectmatch</code>.</p> <p>geralmente, você deseja acessar os itens no menu lugares, localizado à direita de aplicativos, no canto superior esquerdo da tela.</p><p>a opção "computador" fornece uma visão dos dispositivos de armazenamento removíveis no seu computador (unidade de cd, unidades usb, etc.), bem como do sistema de arquivos. para obter uma visão geral do sistema de arquivos, vá para locais&gt; computador&gt; sistema de arquivos. isso deve abrir os títulos de uma janela "/ - navegador de arquivos" com todo o conteúdo do seu sistema de arquivos principal, que geralmente é o conteúdo do seu disco rígido.</p><p>para seus documentos pessoais e outros arquivos de usuário, você pode abrir o marcador "pasta pessoal" (geralmente na parte superior do menu locais) ou um dos outros marcadores da primeira seção.</p><p>todos os ícones nas duas primeiras seções do menu locais abrirão o sistema de arquivos explorer no ubuntu, chamado nautilus, embora a janela provavelmente se intitule "navegador de arquivos".</p>