Я могу объяснить часть этого:
find .
используется для перечисления всех файлов и каталогов по текущему пути (это точка). Find не сказано ничего делать с результатами, но поведение по умолчанию в большинстве реализаций find заключается в том, чтобы выводить их в стандартный вывод.
Для правильного кодирования использовалась бы команда find /path/to/pictures -ls
или -print0
. Последний полезен, когда в имени есть нестандартные символы (например, пробелы).
Вывод нами предыдущей команды затем передается следующей части. Это делается через символ канала (|
).
Следующая команда заключена в цикл while (выделено жирным шрифтом)
во время чтения файла; do timestamp_stat = $(stat -c "% y" "$ file"); отметка времени = $(дата +"% Y% m% d.% H% M% S "-d" $ timestamp_stat "); эхо" $ timestamp: $ file "; оболочка adb su -c" touch -t $ timestamp \"/sdcard/ANDROID_PHONE \" "; сделано
Это читает из файла (в нашем случае из stdin, который содержит выходные данные предыдущей команды). Результаты чтения хранятся в переменной с именем file.
(находит -> находит вывод | -> ввод для цикла while)
Для каждого из этих результатов следующий набор команд выполняется в последовательности:
timestamp_stat=$(stat -c "%y" "$file");
timestamp=$(date +"%Y%m%d.%H%M%S" -d "$timestamp_stat");
echo "$timestamp: $file";
adb shell su -c "touch -t $timestamp \"/sdcard/ANDROID_PHONE\"";
Переменная временная метка создана и заполнена результатами из stat -c
(stat - утилита, отображающая информацию о файле, на который указывает файл. В этом случае файл, на который он указывает, хранится в $ file и помещается в кавычки, чтобы избежать проблем с пробелами.
Затем результаты заменяются той же информацией в другом формате.
Следующий результат - echo'd для std out. Это, вероятно, так что пользователь имеет некоторое представление о том, где находится скрипт.
Наконец, он делает что-то с abd, с которым у меня нет надежной информации. Я думаю, это поручает телефону Android коснуться файла. Касание файла обычно изменяет дату файла на текущее время. Однако в этом случае указывается время установки файла.
С сенсорной страницы:
-t Change the access and modification times to the specified time
instead of the current time of day. The argument is of the form
``[[CC]YY]MMDDhhmm[.SS]'' where each pair of letters represents
the following:
Переходя к решению:
К сожалению, не здесь, только намеки:
- Изменить IFS
- Или используйте -print0 (и возможно с xargs -0)
- Используйте переместить вещь в поиск. Прямо сейчас find используется для поиска файлов, и результаты (включая пробелы) затем передаются в оболочку. Find может делать вещи самостоятельно, хотя. Нет пока readfile нужен.
find /path/to/files -exec "something" {} \;
может работать лучше и быстрее.