Как делают я использую, находят для копирования всех найденных файлов в новое имя в их тех же каталогах?

У меня есть простая команда, которая делает почти, что я хочу. Следующее определит местоположение всех файлов с суффиксом '_compressed.swf' и скопирует каждого в его тот же каталог с '.bak2', добавленным:

найдите '../содержание' - имя '* _ compressed.swf'-print0 | xargs-0-I {} CP {} {} .bak2

Результаты
В:/content/somefile_compressed.swf
:/content/somefile_compressed.swf.bak2

Однако я должен заменить '_compressed.swf' '_content.swf', который я хотел бы использовать, находят, а не рекурсивный флаг на CP для непротиворечивости.

Цель
В:/content/somefile_compressed.swf
:/content/somefile_content.swf

4
задан 23.02.2010, 20:37

3 ответа

Это решение является, вероятно, самым портативным:

find "../content" -name "*_compressed.swf" -exec sh -c 'cp {} `dirname {}`/`basename {} compressed.swf`content.swf' \;

Существует также известный rename.pl сценарий, который распределяется с Perl и переименовать командой, которая, возможно, сделала это немного легче. Они не доступны на всех дистрибутивах, хотя, эти команды по большей части.

4
ответ дан 07.12.2019, 20:28

Я уверен, что это все может быть обработано в одной строке. Я добрался действительно близко к одному решению для строки и с некоторой справкой еще ближе, но никаким успехом. Следующие работы:

#!/bin/bash

# Read all file names into an array
FilesArray=($(find "../content" -name "*_compressed.swf"))

# Get length of an array
FilesIndex=${#FilesArray[@]}


# Use for loop read all directory names
for (( i=0; i<${FilesIndex}; i++ ));
do
    source="${FilesArray[$i]}"
    destination="$(echo "${source}" | sed 's/compressed/content/')"
    cp "${source}" "${destination}"
done

exit 0;
1
ответ дан 07.12.2019, 20:28

Я полагаю, что это должно добиться цели и является разборным к одному лайнеру, если Вы действительно действительно должны ;)

find ../content -name '*_compressed.swf' | while read file
do
cp "$file" "${file/_compressed.swf/_content.swf}"
done

Замена шаблона Bash работает приятно в этих случаях.

0
ответ дан 07.12.2019, 20:28

Теги

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