Я не уверен, что это поможет, но на всякий случай, да, я провел небольшое исследование.
Он может быть реализован как (не применяется в вашей команде)
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
perror(0);
exit(1);
}
Но что касается сигнала
, он устарел.
Лучше может быть
struct sigaction sa;
sa.sa_handler = SIG_IGN;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
if (sigaction(SIGPIPE, &sa, 0) == -1) {
perror(0);
exit(1);
}
Источник и дополнительная информация:
Предотвратить завершение процесса при записи в сломанный канал
и
Игнорировать SIGPIPE, не затрагивая другие потоки в процессе
Если у вас есть rename
(, иногда известный как prename
), вы можете сделать это одной командой:
rename -n 's!(.*/)...(.*).(\.mp3)!$1$2$3!' */?????*.mp3
В качестве альтернативы вы можете просмотреть файлы в цикле:
for f in */?????*.mp3
do
echo mv -v "$f" "$(echo "$f" | sed -r 's!(.*/)...(.*).(\.mp3)!\1\2\3!')"
done
В первую очередь удалите-n
(или замените его на -v
), чтобы он выполнял работу. Во втором экземпляре удалите первый echo
, чтобы изменения вступили в силу.
I would not advise just collecting all files that match *.mp3 and then trimming the file names. You MAY want to run this same script AGAIN later (like next week) and it should NOT try to rename the same files a second time, making them even shorter and have naming conflicts.
Your example file names seem to be 001xyz1.mp3 and you want xyz.mp3
KEEP_DIR=$PWD
cd /your/music/base_dir # sub-dirs holding.mp3
RCOUNT=0 ; SKIP=0 ; FCC=0
for FFF in */001???1.mp3
do
LOC="$(dirname $FFF)"
BAS="$(basename $FFF)"
TRIM1="${BAS#1.mp3}" #could use ${BAS:4:3}
NEWF="$LOC/${TRIM1%001}.mp3"
if [ -e "$NEWF" ] ; then
echo "#-- File $NEWF already exists, not renaming $FFF"
SKIP=$((SKIP+1))
else
mv $FFF $NEWF
MCOUNT=$((MCOUNT+1))
fi
FCC=$((FCC+1))
done
echo "Renamed $MCOUNT mp3 files, of $FCC found. (Skipped $SKIP)"
cd $KEEP_DIR
#--[eof]
Вы можете использовать sed
для создания одной командной строки mv
для каждого mp3 с базовым именем из 7 символов:
$ find. -name "???????.mp3" | sed 's/\(.*\)\(...\)\(...\)\(.\)\(\.mp3\)/mv \1\2\3\4\5 \1\3\5/'
После просмотра вывода вы можете перенаправить его в файл и выполнить.