Ваш код не содержит строк для поиска в данном каталоге и сравнения файлов внутри этого каталога с данными файлами (req_files.txt). Все, что вы делаете, это продолжайте перезаписывать (поскольку вы используете оператор >
, используйте >>
для добавления вместо этого) файла a.txt с содержимым req_files.txt один за другим и когда сценарий завершает работу, остается только последний элемент, записанный в a.txt.
Насколько я понимаю, ваша цель:
Найти и перечислить все файлы внутри указанного пути. Затем сравните этот список с файлами, перечисленными в req_files.txt. И, наконец, перечислите совпадающие в выходном файле a.txt. В этом случае код ниже сделает это за вас:
cwd=/cygdrive/c/Users/abhisek.samanta/Desktop/New_folder
cd $cwd #change dir to the required path
>a.txt # create output file a.txt
for file in `ls`:
do
grep "`echo "$file"`" req_files.txt >> a.txt
done
Теперь в цикле for вы выводите список файлов с помощью команды ls. Этот сценарий создаст файл a.txt внутри заданного пути, который содержит файлы из req_files.txt, которые присутствуют в этом заданном пути.
Используйтепереименуйте команду
:
rename 's/\.bak$//' *.bak
's/\.bak$//'
- выражение perlдля соответствия всем именам файлов, заканчивающимся на .bak
и удалите расширениеПо подсказке ответа RomanPerekhrestздесь, эта команда мне подходит.
rename .bak '' *.bak
Что-то, что должно работать на всех платформах:
for i in *.bak
do
mv $i `echo $i | sed 's/\.bak$//'`
done
Цикл должен работать (в POSIX-подобной оболочке):
for f in *.bak; do
mv -- "$f" "${f%.*}"
done
И как одна строка:
for f in *.bak; do mv -- "$f" "${f%.*}"; done
#!/bin/bash
for val in \`ls *.bat`
do
mv $val `echo $val | cut -f1 -d'.'`
done