Mv несколько файлов в каталог с одинаковым базовым именем

Tú pediste sed,pero edtambién puede hacer esto:

$ seq 10 > input
$ ed -s input <<< '/5/ -2, /5/ +2 d'$'\n'w
$ cat input
1
2
8
9
10

Esto le dice a ed que sedite silenciosamente el archivo inputcon dos comandos:

  1. comenzando en la línea que coincide con la expresión regular 5, menos dos líneas y terminando en la línea que coincide con la expresión regular 5, más dos líneas, delimine ese rango

(separados con un ANSI -salto de línea escapado$'\n')

  1. wgrabe el archivo de nuevo en el disco
0
04.04.2019, 12:44
3 ответа

Предполагая, что мы знаем, что все файлы имеют суффикс имени файла .htmlили .txtи что все каталоги имеют суффикс .directory, вы можете использовать:

for i in *.txt *.html
 do
  mv "$i" "${i%%.*}.directory/$i"
 done 

Запустите это в том же каталоге, где у вас есть файлы. Он удалит конечные.txt и.html из имен файлов, а затем переместит файлы в каталог назначения.

1
28.04.2021, 23:36
dirs=$(ls | grep ".d")
for d in $dirs
do
    filename=$(echo $d | awk -F"." '{print $1}')
    ls | grep  -P "$filename.(?!(d))" | xargs -I{} mv '{}' '$d'
done

Возможно, слишком многословно, но работает

0
28.04.2021, 23:36

Предполагая, что имена файлов и каталогов следуют одному и тому же соглашению об именах в том смысле, что они имеют общий префикс группировки, за которым следует точка, и предполагая, что мы не знаем суффиксов имен файлов или каталогов:

topdir=.

for dirname in "$topdir"/*/; do
    prefix=$( basename "$dirname" )  # $topdir/FileC.directory/ --> FileC.directory
    prefix=${prefix%%.*}             # FileC.directory          --> FileC

    for filename in "$topdir/$prefix".*; do
        if [ ! -d "$filename" ]; then
            mv -i "$filename" "$dirname"
        fi
    done
done

Внешний цикл перебирает все каталоги в каталоге $topdir(, здесь установленном на ., текущем каталоге ). $prefixбудет базовым именем имени каталога с удаленным битом после первой точки.

После того, как префикс был вычислен, файлы )не из -каталогов (в том же каталоге $topdir, которые имеют один и тот же префикс, перемещаются в каталог.

1
28.04.2021, 23:36

Теги

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