Ошибка с находкой и ls

Я пытаюсь использовать, находят и ls для сортировки файлов на основе даты, однако, это ничего не делает. Вот моя команда:

find ./.BUBackups -name "test*" -exec ls -t {} \;

Я также попробовал:

find ./.BUBackups -name "test*" -exec ls -lt {} \;

В тестировании-t просто делает - ничто. работы-l, но если я ввел-t, он действует, как будто я не вставил его вообще. Однако ls-t или ls - Это работает превосходное, когда я не выполняю его через должностное лицо в словах других, просто вводящих ls-t работы

Действительно ли это - незначительный сбой? или я делаю что-то не так?

1
задан 11.02.2011, 19:58

2 ответа

-exec аргумент для нахождения выполняет указанную команду однажды для каждого файла, которые находят, располагается. Таким образом, если у Вас будут файлы test_a, test_b, и test_c, то Ваша команда будет эквивалентна:

ls -lt test_a
ls -lt test_b
ls -lt test_c

Другими словами, каждый список выполняется независимо на файл, таким образом, файлы будут перечислены в любом порядке, находят, определяет местоположение их, а не в порядке времени изменения, как -t опция к ls указывает.

То, что Вы действительно хотите, является чем-то как find ./.BUBackups -name 'test*' | xargs ls -lt, то, которое, с файлами в качестве примера я использовал выше, будет эквивалентно ls -lt test_a test_b test_c. Так как Вы теперь используете один вызов ls для списка всех файлов, которыми Вы интересуетесь, он может поместить их в надлежащий порядок mtime.

3
ответ дан 12.12.2019, 08:15

Причина -t не работает это find выполняется ls однажды для каждого найденного файла отдельно, таким образом, вывод находится в порядке, которым найдены файлы. Чтобы заставить его работать путь, Вы ожидаете:

find ./.BUBackups -name "test*" -exec ls -lt {} +

или

find ./.BUBackups -name "test*" -print0 | xargs -0 -exec ls -lt 
3
ответ дан 12.12.2019, 08:15

Теги

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