Ответ 1
Это сделает это. Вы можете сделать его более эффективным, если вы делаете один и тот же текст для каждого файла...
for f in *; do
echo "whatever" > tmpfile
cat $f >> tmpfile
mv tmpfile $f
done
Я хочу иметь возможность добавлять строку в начало каждого текстового файла в папке. Как это сделать, используя bash в Linux?
Это сделает это. Вы можете сделать его более эффективным, если вы делаете один и тот же текст для каждого файла...
for f in *; do
echo "whatever" > tmpfile
cat $f >> tmpfile
mv tmpfile $f
done
Вы можете сделать это без этого цикла и cat
sed -i '1i whatever' *
если вы хотите создать резервную копию своих файлов, используйте -i.bak
Или используя awk
awk 'FNR==1{$0="whatever\n"$0;}{print $0>FILENAME}' *
И вы можете сделать это, используя sed в 1 одиночной команде, а также
for f in *; do
sed -i.bak '1i\
foo-bar
' ${f}
done
Это должно сделать трюк.
FOLDER='path/to/your/folder'
TEXT='Text to prepend'
cd $FOLDER
for i in `ls -1 $FOLDER`; do
CONTENTS=`cat $i`
echo $TEXT > $i # use echo -n if you want the append to be on the same line
echo $CONTENTS >> $i
done
Я бы не рекомендовал делать это, если ваши файлы очень большие.
Вы также можете сделать это:
for f in *; do
cat <(echo "someline") $f > tempfile
mv tempfile $f
done
Он не сильно отличается от 1-го поста, но показывает, как обрабатывать вывод инструкции "echo" в виде файла без необходимости создания временного файла для хранения значения.
Вы можете использовать команду ed, чтобы обойтись без временных файлов, если хотите:
for file in *; do
(test ! -f "${file}" || test ! -w "${file}") && continue # sort out non-files and non-writable files
if test -s "${file}" && ! grep -Iqs '.*' "${file}"; then continue; fi # sort out binary files
printf '\n%s\n\n' "FILE: ${file}"
# cf. http://wiki.bash-hackers.org/howto/edit-ed
printf '%s\n' H 0a "foobar" . ',p' q | ed -s "${file}" # dry run (just prints to stdout)
#printf '%s\n' H 0a "foobar" . wq | ed -s "${file}" # in-place file edit without any backup
done | less
Это самый легкий, который я разработал.
sed -i '1s/^/Text
, чтобы добавить новый file\n/' /file/to/change
Вот пример:
for f in *;
do
mv "$f" "whatever_$f"
done
rename '' string_ *
: rename '' string_ *