CD к предыдущему каталогу без эха имени каталога

Не уверенный в переключателях командной строки к neroAacEnc, но чему-то вроде этого:

% cd 
% find . -type f -name '*.wav' -exec sh -c '
orgfile="$0"
newfile="$(echo "$0" | sed 's/.wav/.aac/')"
neroAacEnc $orgfile $newfile
' {} \;

Или Вы могли использовать ffmpeg, чтобы сделать (непротестированное) преобразование:

% cd 
% find . -type f -name '*.wav' -exec sh -c '
orgfile="$0"
newfile="$(echo "$0" | sed 's/.wav/.aac/')"
ffmpeg -i $orgfile -ab 256 $newfile
' {} \;

Как сценарий (помещает ниже в файл),

#!/bin/bash

# myscript.bash
cd 

find . -type f -name '*.wav' -exec sh -c '
orgfile="$0"
newfile="$(echo "$0" | sed 's/.wav/.aac/')"

neroAacEnc -2pass -q 1 -if $orgfile -of $newfile
' {} \;

После создания файла (myscript.bash) делают это исполняемым файлом chmod +x myscript.bash, выполните его ./myscript.bash, и Вы сделаны.

Ссылки

-FFmpeg и AAC, кодирующий руководство

Примечание: Существуют дополнительные "рецепты" для преобразования .wav к .aac и получению различных качеств, характеристик, и т.д.

8
17.01.2015, 10:59
1 ответ

cd принимает во внимание только первый аргумент, игнорируя все остальные. Ни одна из опций не влияет на эхо предыдущего патнамента (возможно, документированный -@ действительно имеет такой эффект, но это недействительная опция в моей системе).

Если вы не хотите использовать псевдоним/функцию, которая может дать вам еще меньше символов для ввода, чем cd -, или перенаправить на /dev/null, я предлагаю начать использовать специальное тильдовое расширение в bash:

cd ~-

Из bash man page:

Если тильда-префикс - это `~-', то подставляется значение переменной оболочки OLDPWD, если она установлена.

Похоже, что это еще одна область в bash, где было создано некое особое значение. Тильдовое расширение обычно работает на $DIRSTACK, манипулируется/инвестируется с помощью pushd, popd, и dirs, оно может быть использовано и в других командах (cp ~-/somefile . ) и если вы использовали pushd, вы можете использовать ~N (где N - это количество оттесненных уровней), чтобы добраться до этих каталогов (для cd или других команд).


BTW, если вы имеете учетные записи на нескольких машинах и предполагаете, что вы используете ssh для входа на них из одного места, вам следует подумать о добавлении к вашему ~/.bashrc:

if [ -f ~/.bash_common ]; then
    . ~/.bash_common
fi

и затем иметь скрипт на вашей рабочей машине, который использует scp для "нажатия" bash_common на каждой из этих машин. Таким образом, вы можете добавлять и совместно использовать общую функциональность на нескольких машинах с минимальными накладными расходами.

11
27.01.2020, 20:11

Теги

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