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

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

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

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

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

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


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

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/ каталог.

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

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

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

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

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

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

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

Здесь есть несколько вариантов. Одним из них является использование -print0 переключиться на find в сочетании с соответствующим призывом к xargs, Смотрите соответствующие man страницы для деталей.

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

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

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

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