У меня есть текстовый файл с длинным списком расширений файлов:
.sln
.csproj
.cs
.xaml
.cshtml
.javasln
.project
.java
... (etc)
У меня есть три каталога проектов, каждый со многими подкаталогами.
Я могу получить список всех файлов и пути с: find . -type f -printf "%p\n"
./DirectoryA/src/main/resources/static/resources/build/home.ini
./DirectoryA/src/main/resources/static/resources/images/spring-pivotal-logo.png
./DirectoryB/src/main/resources/db/hsqldb/data.sql
./DirectoryC/src/main/resources/project/schema.project
Я хочу, чтобы l oop через них, и если расширение файла соответствует одному из моего списка, скопируйте его в myCopyDirectory
, сохраняя при этом их структуру каталогов.
То есть, если ./DirectoryC/src/main/resources/project/schema.project
расширение файла соответствует .project
(как оно есть) как одно из расширений в моем текстовом файле ... скопируйте его в новый каталог, например ./myCopyDirectory
, как: ./myCopyDirectory/DirectoryC/src/main/resources/project/schema.project
.
Так что мне понадобится для или пока l oop, пожалуйста, прости мой ужасный псевдокод, но это мое видение
Сценарий 1: Копирование файлов на лету
for FILE in `find . -type f -printf "%p\n"`; do if [ ${FILE##*.} in extensions.txt ]; then mkdir -p ./myCopyDirectory/DirectoryC/src/main/resources/project/ && cp ./DirectoryC/src/main/resources/project/schema.project ./myCopyDirectory/DirectoryC/src/main/resources/project/schema.project
Сценарий 2: Создайте список файлов, которые соответствуют и скопируйте их
for FILE in `find . -type f -printf "%p\n"`; do if [ ${FILE##*.} in extensions.txt ]; then echo $FILE >> listOfFiles.txt
for FILE in `cat listOfFiles.txt`; do filename="${FILE##*/}" && dir="${FILE:0:${#FILE} - ${#filename}}" && if [ -e ./myCopyDirectory/$dir ]; then mkdir -p ./myCopyDirectory/$dir && cp $FILE ./myCopyDirectory
Сценарий 3: Просто cp -R
все три папки в ./myCopyDirectory
и вырвите все файлы, которые не соответствуют сопоставьте расширения в файле extensions.txt
Извините, пожалуйста, мой ужасный псевдокод. Я просто пытаюсь сделать эту работу и немного не в себе. Я мог бы создать скрипт PERL или Python, но это кажется ненужным.