Remove part of filename of files that are in different folders - directory

I want to remove part of a filename of several files, with different extensions, that are in separate folders, i.e., I have a 'master folder' that has 90 folders, and the files are in these folders. How could I remove just part of all files, in all folders, automaticaly.
Regards

What you can do is create a recursive method that renames all files in a directory and then calls the method for other directories in that one. The code below should serve you as guideline (it cuts the first 5 chars of the filename):
public void RenameFiles(DirectoryInfo dir)
{
foreach (var file in dir.GetFiles())
{
file.MoveTo(Path.Combine(file.Directory.FullName, file.Name.Substring(5)));
}
foreach(var directory in dir.GetDirectories())
{
RenameFiles(directory);
}
}
I assumed you use C# because this is my main language. The mechanism is the same regardless the language.

Related

Atom - search by extension in selected folder

When I search for certain string ("Search in directory"), atom allows to do 2 things: specify directory or file extension (but then it searches in all directories in project). Is it possible to do both at the same time? E.g. I want to do recursive search in 'src' directory, but using only *.c and *.cpp files.
Try searching using src/**/*.c as file/directory pattern.
To search both *.c and *.cpp files, use ,:
src/**/*.c, src/**/*.cpp
To speed things up, use ! to exclude an unwanted directory:
src/**/*.c, src/**/*.cpp, !src/not_this_dir/

How to set JSHint options on per directory basis

I see that the ability to specify JSHint options on a per directory basis was added here.
However it is not clear to me how you actually take advantage of this. What do I do to set JSH options in a single directory, so that the options differ from other directories?
It appears that the change in question actually allows you to specify overriding options on a per-file basis. You can add an overrides property to your config, the value of which should be an object. The keys of this object are treated as regular expressions against which file names are tested. If the name of the file being analysed matches an overrides regex then the options specified for that override will apply to that file:
There's an example of this in the cli.js test file diff in the commit you linked to:
{
"asi": true,
"overrides": {
"bar.js$": {
"asi": false
}
}
}
In that example there is a single override which will apply to any files that match the bar.js$ regular expression (which looks like a bit of an oversight, since the . will match any character and presumably was intended to only match a literal . character).
Having said all that, it doesn't look like the overrides property is going to help you. I think what you actually want is a new .jshintrc file in the directory in question. JSHint looks for that file starting in the directory of the file being analysed and moves up the directory tree until it finds one. Whichever it finds first is the one that gets used. From the docs:
In case of .jshintrc, JSHint will start looking for this file in the same directory as the file that's being linted. If not found, it will move one level up the directory tree all the way up to the filesystem root.
A common use case for this is to have separate JSHint configurations for your application code and your test code. This allows you to define the different environments and globals separately.

grunt-init template conditional copy files

I've just started using grunt-init. I have everything working.
And I was wondering if there is a way to do conditional copy root files based on prompts which based on answers to previous prompts.
You can make use of the rename.json file via the docs.
The prop should be the path to the file you want to copy/not copy, and the value can be a template string with a conditional. For example, let's say you had two different main.js files, one empty and one with code you tend to re-use:
{
"app/js/main-empty.js": "{% if (empty) { %}app/js/main.js{% } %}",
"app/js/main-skeleton.js": "{% if (!empty) { %}app/js/main.js{% } %}"
}
The destpath checks the value of the props.empty variable from your template.js file, copies and renames correctly.
Here is a link to a gist showing the template.js and rename.js for that example.

How do I recognize a symlink in Dart when dealing with the Directory class?

When I instantiate a Directory in Dart, and that file exists, how can I check whether the Directory is a real folder, or just a symlink?
The way you can recognize a symlink is if the path differs from the full path. Directory doesn't have fullPath() or fullPathSync(), but File.fullPathSync() works on directories. So you can do this:
bool maybeIsSymlink(String path) {
var fullPath = new File(path).fullPathSync();
return path != fullPath;
}
However this only works correctly when path is absolute, and none of its ancestors are symlinks. To work around that you can get the full path of the directory's parent, append the directory name and compare that:
bool isSymlink(String pathString) {
var path = new Path(path);
var parentPath = path.directoryPath;
var fullParentPath = new File.fromPath(parentPath).fullPathSync();
var expectedPath = new Path(fullParentPath).append(path.filename).toString();
var fullPath = new File.fromPath(path).fullPathSync();
return fullPath != expectedPath;
}
Note that I have not tested this, but I've dealt with symlinks a lot in Dart, and this should work. If pathString ends in '/' you'll have to remove it. I usually end up getting paths from a directory listing, so I track the expected path as I recurse down the directory structure.
You can see a special listDirectory() implementation that detects symlinks and sends Symlink instances to the stream along with Files and Directorys in a branch in buildtool: https://github.com/dart-lang/buildtool/blob/m4/lib/src/util/io.dart
In bleeding edge, there now is a static FileSystemEntity.isLinkSync(path) methods that will tell you if something is a symlink; also when it is a broken symlink.
http://api.dartlang.org/docs/bleeding_edge/dart_io/FileSystemEntity.html
For operations on links we are adding a Link class. The code is out for review now:
https://codereview.chromium.org/12691002
If you want to check from the command line to verify what is happening,
ls -al DIRNAME and check for 'l' in the permissions section, and examine what it's pointing "to" on the right side of the output.
see also man 1 stat
If you're wanting to check that from within Dart itself, I don't know how.
FileSystemEntity.typeSync(path)
return an FileSystemEntityType with one of the values
FileSystemEntityType.DIRECTORY
FileSystemEntityType.FILE
FileSystemEntityType.LINK
FileSystemEntityType.NOT_FOUND

Subfolders in App_GlobalResources (ASP.NET)

Is it possible to put resource files (.resx) within subfolders inside App_GlobalResources?
For example:
/App_GlobalResources/someresources/myfile.resx
/App_GlobalResources/someresources/myfile.fr-fr.resx
/App_GlobalResources/othereresources/otherfile.resx
/App_GlobalResources/othereresources/otherfile.fr-fr.resx
Or, are all the .resx files placed directly inside App_GlobalResources?
If it is possible to use subfolders, how do you programmatically access resources within subfolders?
Technically, yes it is possible but there are some pitfalls. First, let me show you an example. Suppose my App_GlobalResources folder looks like so:
/App_GlobalResources
/Test
TestSubresource.resx
TestResource.resx
Each resource file has a single entry called "TestString". I added each resource file using the Visual Studio menu so it created a class for me. By default, all classes added to the App_GlobalResources folder will have the same namespace of Resource. So, if I want to use the class generator and I want Test in the namespace, I need to go into the TestSubresource.Designer.cs file and manually change the namespace. Once I do that, I can do the following:
var rootResource = Resources.TestResource.TestString;
var subResource = Resources.Test.TestSubResource.TestString;
I can also reference them using GetGlobalResourceObject:
var rootResource = GetGlobalResourceObject( "TestResource", "TestString" );
var subResource1 = GetGlobalResourceObject( "TestSubresource", "TestString" );
Notice that I still use the "TestSubresource" as the means to reference the resources in that file even though it is in a subfolder. Now, one of the catches, is that all the files must be unique across all folders in App_GlobalResources or your project will throw a runtime error. If I add a resource named "TestResource.resx" to /Test, it will throw the following runtime error:
The resource file '/App_GlobalResources/TestResource.resx' cannot be
used, as it conflicts with another file with the same name.).
This is true even if I change the namespace on the new resource.
So, in conclusion, yes it is possible, but you increase the odds of getting a runtime error because of two identically named resource files in different parts of the App_GlobalResources folder structure which is allowed by the file system but not by .NET.
It's possible. At least, I managed to do it.
Within a web site I added the App_GlobalResources folder. Inside it I created another folder "MyFolder" and placed MyResource.resx file inside. Resx file contained one pair MyKey1 - MyValue1.
Using the GetResource method of the following class I successfully extracted "MyValue1" for name="MyKey1"
static class Class1 {
static Assembly FindGlobalResAssembly() {
foreach(Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
if(asm.FullName.StartsWith("App_GlobalResources."))
return asm;
}
return null;
}
public static object GetResource(string name) {
Assembly asm = FindGlobalResAssembly();
if(asm == null)
return null;
return new ResourceManager("Resources.MyResource", asm).GetObject(name);
}
}
This approach works in Medium trust also.
It seems that folders make no difference when accessing resources from code.

Resources