1

У меня есть файл с тем же именем (разные данные) и находится в нескольких каталогах.

Пример:

/path/to/this/dir1/data.csv
/path/to/this/dir2/data.csv
/path/to/this/dir3/data.csv
/path/to/this/dir4/data.csv

Я хочу скопировать эти файлы (с соответствующей папкой прямо над ней) в новое место.

Я пробовал что-то вроде этого (dir1, dir2, dir3, dir4 уже сделаны):

cp -rf /path/to/this/{dir1,dir2,dir3,di4}/data.csv ./{dir1,dir2,dir3,dir4}/.

Это, конечно, не работает, но я не уверен, как правильно сделать это в одну строку (что было бы предпочтительным, но если сценарий должен быть написан, не имеет большого значения).

1 ответ1

6

Если ваш cp поддерживает опцию --parents , вы можете использовать

cd /path/to/this
cp --parents dir{1..4}/data.csv /path/to/target/

Цикл for также должен работать:

for data in /path/to/this/dir{1..4}/data.csv ; do
    cp $data ${data#path/to/this/}
done

Или используйте find (без расширения скобок ivolved):

cd /path/to/this
find -path './dir[1234]' -exec cp {}/data.csv /path/to/target/{} \;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .