Скопируйте символические файлы, указывающие на один путь источника1 к другому пути источника2 в папке назначения

Использование только shell (bash) с небольшой помощью из mv:

#!/bin/bash
shopt -s globstar  ##globstar will let us match files recursively
files=( /foo/bar/**/*.jpg )  ##Array containing matched files, mention where to search and what files here
for i in "${files[@]}"; do 
    d="${i%/*}"  ##Parameter expansion, gets the path upto the parent directory
    d_="${d##*/}"  ##gets the name of parent directory
    f="${i##*/}"  ##gets the file name
        echo mv "$i" "$d"/"${d_}""$f"  ##renaming, remove echo after confirming what will be changed and you are good
done

Пример:

$ shopt -s globstar
$ files=( /foo/bar/**/*.jpg )
$ for i in "${files[@]}"; do d="${i%/*}"; d_="${d##*/}"; f="${i##*/}"; echo mv "$i" "$d"/"${d_}""$f"; done
mv /foo/bar/KT/633-ROYAL/4.jpg /foo/bar/KT/633-ROYAL/633-ROYAL4.jpg
mv /foo/bar/KT/633-ROYAL/5.jpg /foo/bar/KT/633-ROYAL/633-ROYAL5.jpg
mv /foo/bar/KT/633-ROYAL/6.jpg /foo/bar/KT/633-ROYAL/633-ROYAL6.jpg
mv /foo/bar/KT/633-ROYAL/BLUE-MULTI/1.jpg /foo/bar/KT/633-ROYAL/BLUE-MULTI/BLUE-MULTI1.jpg
mv /foo/bar/KT/633-ROYAL/BLUE-MULTI/2.jpg /foo/bar/KT/633-ROYAL/BLUE-MULTI/BLUE-MULTI2.jpg
mv /foo/bar/KT/633-ROYAL/BLUE-MULTI/3.jpg /foo/bar/KT/633-ROYAL/BLUE-MULTI/BLUE-MULTI3.jpg
0
задан 31 January 2018 в 19:49

2 ответа

Вы могли понять, что если бы вы создали символические ссылки с опцией -r и вместо этого использовали относительные ссылки, значит, symlink_file1, например, ссылается на ../../orig_file1.txt. Кроме того, при копировании вы также должны использовать параметр -P (без разыменования).

0
ответ дан 17 July 2018 в 21:49

Вы могли понять, что если бы вы создали символические ссылки с опцией -r и вместо этого использовали относительные ссылки, значит, symlink_file1, например, ссылается на ../../orig_file1.txt. Кроме того, при копировании вы также должны использовать параметр -P (без разыменования).

0
ответ дан 23 July 2018 в 22:27
  • 1
    Спасибо, но в моем случае относительные ссылки не будут работать. Первый набор символических ссылок указывает на локальный путь в машине A, тогда как файлы назначения должны указывать на некоторый путь NFS, который может быть доступен с любых компьютеров в сети. – Rajesh Kumar TV 31 January 2018 в 21:36

Другие вопросы по тегам:

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