Переместить структуру папок между несколькими каталогами [дубликат]

С perl :

perl -lne 'for (/<Overall>([\d.eE+-]+)/g) {$n++; $sum += $1}
           END{print $sum/$n if $n}'

Это дает возможность обрабатывать более одного тега в строке. [\ d.eE + -] + является грубым сопоставлением десятичного числа с плавающей запятой (допускает такие вещи, как 12, 1.2, -1E + 20 (хотя также и вещи, которые не являются действительными числами)).

4
23.03.2018, 21:21
5 ответов

В целевом аргументе нельзя использовать подстановочные знаки. Так что нужен хоть какой-то скрипт:

for d in *; do
    if [[ -d "$d" ]]; then
        pushd "$d"
        mv __test__/index.js./data.js
        popd
    fi
done
4
27.01.2020, 20:47

Вот пример перемещения файлов.

for f in $(find -name index.js | grep __test__ ); do echo $f; destination=$(echo $f | awk 'BEGIN{FS="/"} {print $2}'); mv ${f}./$destination/data.js; done

Я проверял это, движение выполняется, как и ожидалось.

2
27.01.2020, 20:47

Я забыл о gnu parallel!

ls -d -- */ | parallel "cd {} && mv./__test__/index.js./data.js 2>/dev/null"
1
27.01.2020, 20:47
find. -path '*/__test__/*' -type f -name "index.js" \ 
    -execdir echo mv -vt../data.js {} \;

Удалите echo, который предназначен для пробного -запуска, чтобы запустить команду mvдля файлов.

2
27.01.2020, 20:47

Удалите echos для реального изменения.

for i in */__test__/index.js; do
    echo mv -v "$i" "${i%%/*}/data.js"
    echo rm -vr "${i%/*}"
done

До

.
├── alpha
│   ├── index.js
│   ├── __test__
│   │   └── index.js
│   └── test.js
└── beta
    ├── index.js
    ├── __test__
    │   └── index.js
    └── test.js

После

.
├── alpha
│   ├── data.js
│   ├── index.js
│   └── test.js
└── beta
    ├── data.js
    ├── index.js
    └── test.js
1
27.01.2020, 20:47

Теги

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