Как записать каждый N-й файл в новую папку - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть этот код, который сканирует папки и перемещает все файлы в каждой папке в новую.

Как мне сделать так, чтобы перемещался только каждый N-й файл?

#!/bin/bash

# Save this file in the directory containing the folders (bb in this case)
# Then to run it, type:
# ./rencp.sh

# The first output frame number
let "frame=1"

# this is where files will go. A new directory will be created if it doesn't exist
outFolder="collected"

# print info every so many files.
feedbackFreq=250

# prefix for new files
namePrefix="ben_timelapse"

#new extension (uppercase is so ugly)
ext="jpg"

# this will make sure we only get files from camera directories
srcPattern="ND850"

mkdir -p $outFolder
for f in *${srcPattern}/*
do
mv $f `printf "$outFolder/$namePrefix.%05d.$ext" $frame`
if ! ((frame % $feedbackFreq)); then
    echo "moved and renamed $frame files to $outFolder"
fi
let "frame++"
done

Я уверен, что мне нужно отредактировать строку for f in *${srcPattern}/*, но не уверен в правильном синтаксисе

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Если файлы в папках ND850 являются последовательными (если они указаны в списке) (т. Е. Номера дополненных кадров), а сами папки расположены по порядку, то следующий код должен работать.

#!/bin/bash

# Maintain a counter, and the output frame number
let "frame=1"
let "outframe=1"

outFolder="collected"

# frequency
gap=5

namePrefix="ben_timelapse"

#new extension (uppercase is so ugly)
ext="jpg"

srcPattern="ND850"

echo "Copying and renaming 1 in every $gap files"

mkdir -p "$outFolder"
for f in *${srcPattern}/*
do
if ! ((frame % $gap)); then
    outfile=`printf "$outFolder/$namePrefix.%05d.$ext" $outframe`
    cp $f "$outfile"
    echo "copied $f to $outfile"
    let "outframe++"
fi
let "frame++"
done
0 голосов
/ 06 февраля 2019

Попробуйте это вместо вашей команды mv после do:

if ! ((frame % 5)); then
  a=$((frame / 5));
  mv $f `printf "$outFolder/$namePrefix.%05d.$ext" $a`
fi

Она переместится frame = 5,10 и т. Д. На $outFolder/$namePrefix.00001.$ext, $outFolder/$namePrefix.00002.$ext,и так далее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...