Como eu altero a Data de Criação / Modulação de todas as pastas em uma unidade USB usando o comando Tocar?

1

Eu tenho um drive USB com música mp3 nele que eu toco no meu carro. Meu carro tem uma porta de drive USB. O problema é que o carro classifica a música por Data de Criação / Modificação (e não alfabeticamente). Isso faz com que seja difícil encontrar o artista que estou procurando.

Para resolver esse problema, eu preciso de uma maneira de "atualizar" a Data de Criação / Modificação para todas as pastas na unidade USB toda vez que eu adicionar uma nova pasta de música à unidade USB. Alguém sabe como posso fazer isso?

O comando Touch funciona muito bem, mas o formato touch <filename> demoraria muito para ser feito em cada pasta na unidade. De qualquer forma para selecionar todas as pastas na unidade e, em seguida, touch <all folders> ?

No meu drive USB eu tenho uma pasta para cada álbum e as músicas dentro de cada pasta, assim: Album-1-folder Album-2-folder

Eu preciso aplicar o comando Touch a cada pasta do "álbum" na unidade.

Eu me deparei com uma solução simples para resolver esse problema: touch /media/USB_Drive/*

    
por Chad--24216 02.07.2012 / 21:02

3 respostas

2

Se você tiver muitos arquivos para tocar, só vai demorar um pouco. Você pode conectar a unidade e em um terminal, supondo que sua unidade esteja montada como /media/USB_DISK , faça o seguinte:

for i in 'find /media/USB_DISK -type d|sed -e 's/ /%20/g'|sort'; do
   echo $i|sed -e 's/%20/\ /g'|xargs touch
done

Basta substituir o USB_DISK pelo nome correto da pasta em que sua unidade está montada no diretório /media/ .

    
por dobey 02.07.2012 / 21:24
0

Mesmo que você consiga que isso funcione, todos os arquivos terão a mesma data. Não parece que isso ajudaria.

O que funcionaria é um script que tenha nomes de arquivo codificados. Codificar os nomes dos arquivos é necessário para criar o seu pedido preferido. Basta "tocá-los" na ordem preferida "criar" seu pedido, para que você não precise inserir datas reais no comando de toque.

#!/bin/bash

cd /path/to/folder1
touch file1
sleep 1
touch file4
sleep 1
touch file2
sleep 1
touch "file 5 with spaces"

cd /path/to/folder2
touch file9
sleep 1
touch file3
sleep 1

Os comandos "sleep" são necessários para forçar cada "toque" a ter um horário diferente. Observe que o arquivo "números" não importa e são processados fora da ordem numérica. A ordem no script, no entanto, cria a ordem de "processamento".

Observe que você precisará atualizar e executar seu script toda vez que adicionar novas músicas / arquivos.

Editar: acabei de ver a postagem "localizar classificado". Isso provavelmente funcionaria melhor. :)

    
por Tom 02.07.2012 / 21:24
0

A resposta de Dobey está no caminho certo, mas falhará se algum nome de diretório contiver um espaço. Em geral, não é uma boa ideia usar a saída de find em um script pelo mesmo motivo que a saída de ls não deve ser analisada por um script: Os nomes de arquivo podem conter facilmente caracteres que dificultam ou impossível para um script interpretar com precisão.

Existem várias opções aqui. Uma é usar a opção -print0 para find combinada com uma chamada apropriada para xargs . Veja as respectivas man páginas para detalhes.

A abordagem que estou recomendando é mais simples para o problema específico em questão e usa o shell globing para obter nomes de arquivo precisos:

for i in /media/USB_Drive/*; do
  [[ -d "$i" ]] || continue   # skip non-directories
  echo "touching $i..."
  touch "$i"
done

Observe que o uso de uma glob gera automaticamente uma lista em ordem alfabética.

    
por Scott Severance 03.07.2012 / 16:56