Как изменить дату создания / изменения всех папок на USB-накопителе с помощью сенсорной команды?

У меня есть USB-накопитель с mp3-музыкой, который я играю в своей машине. У моей машины есть порт USB. Проблема в том, что машина сортирует музыку по дате создания / модификации (а не по алфавиту). Из-за этого трудно найти того художника, которого я ищу.

Чтобы решить эту проблему, мне нужен способ «обновлять» дату создания / изменения для всех папок на USB-накопителе каждый раз, когда я добавляю новую музыкальную папку на USB-накопитель. Кто-нибудь знает, как я могу это сделать?

Команда Touch работает отлично, но формат touch <filename> занял бы целую вечность для каждой папки на диске. В любом случае, чтобы выбрать все папки на диске, а затем touch <all folders>?

На моем USB-накопителе у меня есть папка для каждого альбома и песни в каждой соответствующей папке, например так: Album-1-folder Album-2 папка

Мне нужно применить команду Touch к каждой из папок «альбома» на диске.


Я наткнулся на простое решение, чтобы решить эту проблему: touch /media/USB_Drive/*

1
задан 14 February 2017 в 14:16

3 ответа

Если у вас есть много файлов, к которым нужно прикоснуться, это займет некоторое время. Вы можете подключить диск, и в терминале, если ваш диск смонтирован как /media/USB_DISK, выполните следующее:

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

Просто замените USB_DISK на правильное имя папки, где ваш диск смонтирован в каталоге /media/.

0
ответ дан 14 February 2017 в 14:16

Даже если вы заставите это работать, все файлы будут иметь одинаковую дату. Похоже, это не поможет.

Что будет работать, так это скрипт с жестко закодированными именами файлов. Жесткое кодирование имен файлов необходимо для создания предпочтительного порядка. Простое «касание» их в предпочтительном порядке «создаст» ваш заказ, поэтому вам не нужно вводить фактические даты в команду касания.

#!/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

Команды «сна» необходимы, чтобы заставить каждое «прикосновение» иметь различное время. Обратите внимание, что файл "числа" не имеет значения, и обрабатываются в числовом порядке. Однако порядок в сценарии создает порядок «обработки».

Обратите внимание, что вам нужно будет обновлять и запускать скрипт каждый раз, когда вы добавляете новые песни / файлы.

Редактировать: я только что увидел сообщение "отсортированный поиск". Это, вероятно, будет работать лучше. :)

0
ответ дан 14 February 2017 в 14:16

Ответ Dobey на правильном пути, но он перестанет работать, если какое-либо имя каталога будет содержать пространство. В целом это не хорошая идея использовать вывод find в сценарии по той же причине, что вывод ls не должен быть проанализирован сценарием: Имена файлов могут легко содержать символы, которые мешают или невозможный для сценария точно интерпретировать.

Здесь существует несколько опций. Нужно использовать -print0 переключатель к find объединенный с соответствующим вызовом к xargs. Посмотрите соответствующее man страницы для деталей.

Подход, который я рекомендую, более прост для определенной проблемы под рукой и использует оболочку globing для получения точных имен файлов:

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

Обратите внимание, что использование шарика автоматически приводит к расположенному в алфавитном порядке списку.

0
ответ дан 14 February 2017 в 14:16

Другие вопросы по тегам:

Похожие вопросы: