Unix - заменяет имена файлов уникальными префиксами в каталоге с определенными уникальными префиксами из файла в том же каталоге

find просматривает файлы в любом порядке, возвращаемом файловой системой. Этот порядок непредсказуем; создание, удаление или переименование файла может изменить порядок других файлов в том же каталоге.

Это решающий вопрос, вернет ли find / -type d -name myDir сначала / usr / myDir или / home / myDir , и он может изменить в любой момент. (В этом конкретном примере он, вероятно, не будет часто меняться, потому что запись в корневой каталог выполняется редко, но в целом не рассчитывайте на это.)

В некоторых оболочках (включая bash) Команда cd игнорирует все аргументы, кроме первых, поэтому ваша команда незаметно изменяет рабочий каталог на все, что find возвращает первым. (Ваша команда также не будет работать для пути, содержащего пробелы .) В других оболочках (таких как ksh и zsh) вы получите сообщение об ошибке.

0
11.12.2018, 16:43
1 ответ

В этом случае достаточно простого цикла оболочки:

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после тестирования.

2
28.01.2020, 02:31

Теги

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