У меня есть USB-накопитель с mp3-музыкой, который я играю в своей машине. У моей машины есть порт USB. Проблема в том, что машина сортирует музыку по дате создания / модификации (а не по алфавиту). Из-за этого трудно найти того художника, которого я ищу.
Чтобы решить эту проблему, мне нужен способ «обновлять» дату создания / изменения для всех папок на USB-накопителе каждый раз, когда я добавляю новую музыкальную папку на USB-накопитель. Кто-нибудь знает, как я могу это сделать?
Команда Touch работает отлично, но формат touch <filename>
занял бы целую вечность для каждой папки на диске. В любом случае, чтобы выбрать все папки на диске, а затем touch <all folders>
?
На моем USB-накопителе у меня есть папка для каждого альбома и песни в каждой соответствующей папке, например так: Album-1-folder Album-2 папка
Мне нужно применить команду Touch к каждой из папок «альбома» на диске.
Я наткнулся на простое решение, чтобы решить эту проблему: touch /media/USB_Drive/*
Если у вас есть много файлов, к которым нужно прикоснуться, это займет некоторое время. Вы можете подключить диск, и в терминале, если ваш диск смонтирован как /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
Команды «сна» необходимы, чтобы заставить каждое «прикосновение» иметь различное время. Обратите внимание, что файл "числа" не имеет значения, и обрабатываются в числовом порядке. Однако порядок в сценарии создает порядок «обработки».
Обратите внимание, что вам нужно будет обновлять и запускать скрипт каждый раз, когда вы добавляете новые песни / файлы.
Редактировать: я только что увидел сообщение "отсортированный поиск". Это, вероятно, будет работать лучше. :)
Ответ 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
Обратите внимание, что использование шарика автоматически приводит к расположенному в алфавитном порядке списку.