#!/usr/bin/env bash
old_dir="/path/to/somewhere"
new_dir="/path/to/somewhere_else"
prefix="new_"
if [ ! -d "$old_dir" -o ! -d "$new_dir" ]; then
echo "ERROR: We're missing a directory. Aborting." >&2
exit 1
fi
for file in "$old_dir"/*; do
tail +2 "$file" > "$new_dir"/"${prefix}${file##*/}"
done
Важной частью этого являются:
for
петля, которая позволяет сделать работу на каждом $file
.
tail +2
который является обозначением, которое должно удалить первую строку файла. Если ваш tail
не поддерживает это, вы можете получить тот же результат с sed -e 1d
.
${file##*/}
который функционально эквивалентен basename "$file"
, но без нереста ребенка.
Действительно, ничто из этого не является специфичным для bash. Вы можете запустить это в /bin/sh
в большинстве операционных систем.
Обратите внимание, что приведенный выше код предназначен для объяснения процесса . Как только вы поймете этот процесс, вы сможете разработать более быстрые и короткие стратегии для достижения того же. Например:
find "$old_dir" -depth 1 -type f -exec sh -c "tail +2 \"{}\" > \"$new_dir/$prefix\$(basename {})\"" \;
Примечание: Я не проверял это. Если вы планируете использовать любое из этих решений, убедитесь, что вы их понимаете, прежде чем пытаться, чтобы вы случайно не сбивали ваши данные.
Что вы пробовали? Очень сложно отлаживать ваш код, когда вы не включаете его в свой вопрос! – ghoti
Скорее всего, это однострочный скрипт, предполагающий, что ваши требования действительно настолько просты. Вы пробовали что-нибудь для этого? –