find
просматривает файлы в любом порядке, возвращаемом файловой системой. Этот порядок непредсказуем; создание, удаление или переименование файла может изменить порядок других файлов в том же каталоге.
Это решающий вопрос, вернет ли find / -type d -name myDir
сначала / usr / myDir
или / home / myDir
, и он может изменить в любой момент. (В этом конкретном примере он, вероятно, не будет часто меняться, потому что запись в корневой каталог выполняется редко, но в целом не рассчитывайте на это.)
В некоторых оболочках (включая bash) Команда cd
игнорирует все аргументы, кроме первых, поэтому ваша команда незаметно изменяет рабочий каталог на все, что find
возвращает первым. (Ваша команда также не будет работать для пути, содержащего пробелы .) В других оболочках (таких как ksh и zsh) вы получите сообщение об ошибке.
В этом случае достаточно простого цикла оболочки:
while read -r new old; do
[ -f "$old.sorted_dup.bam" ] && echo mv -- "$old.sorted_dup.bam" "$new.sorted_dup.bam"
done < filenames
где filenames
— имя файла, содержащего сопоставления. Удалите echo
после тестирования.