diff --git a/.gitignore b/.gitignore index 3c3629e64..7ef75e11b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ node_modules +.DS_Store +.DS_Store +**/.DS_Store diff --git a/implement-shell-tools/cat/cat.py b/implement-shell-tools/cat/cat.py new file mode 100644 index 000000000..686fe8ed0 --- /dev/null +++ b/implement-shell-tools/cat/cat.py @@ -0,0 +1,47 @@ +import sys +from pathlib import Path + +def cleanInput(listOfFiles): + cleanLinesArr = [] + + for file in listOfFiles: + grabbedText = Path(file).read_text(encoding="utf-8") + splitLines = grabbedText.splitlines() + cleanLinesArr.extend(splitLines) + + return cleanLinesArr + +def takeSpecifiedAction(cleanLinesArr, flag): + countingOnlyFullLines = 1 + + if flag not in (None, "-n", "-b"): + print("incorrect flag") + return + + for line in cleanLinesArr: + if not flag: + print(line) + elif flag == "-n": + print(f"{countingOnlyFullLines} {line}") + countingOnlyFullLines += 1 + elif flag == "-b": + if line == "": + print("") + else: + print(f"{countingOnlyFullLines} {line}") + countingOnlyFullLines += 1 + + +args = sys.argv[1:] +flag = None +restIsFiles = [] + +if len(args) > 0 and args[0] and args[0][0] == "-": + flag = args[0] + restIsFiles = args[1:] +else: + flag = None + restIsFiles = args + +lines = cleanInput(restIsFiles) +takeSpecifiedAction(lines, flag) \ No newline at end of file diff --git a/implement-shell-tools/ls/ls.py b/implement-shell-tools/ls/ls.py new file mode 100644 index 000000000..1f85e729f --- /dev/null +++ b/implement-shell-tools/ls/ls.py @@ -0,0 +1,39 @@ +import sys +import os + +# `ls -1` +def showAllFilesInDir(directory): + listOfFiles = os.listdir(directory) + + for eachFile in listOfFiles: + if eachFile[0] != ".": + print(eachFile) + +# `ls -1 sample-files` +def showVisibleInSampleFiles(directory): + listOfFiles = os.listdir(directory) + + for eachFile in listOfFiles: + if eachFile[0] != ".": + print(eachFile) + +# `ls -1 -a sample-files` +def showAllInSampleFiles(directory): + listOfFiles = os.listdir(directory) + + for eachFile in listOfFiles: + print(eachFile) + +argv = sys.argv[1:] + +show_all = "-a" in argv + +directories = [arg for arg in argv if arg != "-a"] +if not directories: + directories = ["."] + +for directory in directories: + if show_all: + showAllInSampleFiles(directory) + else: + showVisibleInSampleFiles(directory) \ No newline at end of file diff --git a/implement-shell-tools/wc/wc.py b/implement-shell-tools/wc/wc.py new file mode 100644 index 000000000..42738869f --- /dev/null +++ b/implement-shell-tools/wc/wc.py @@ -0,0 +1,26 @@ +import sys +from pathlib import Path + +def countAll(listOfFiles, flag=None): + for file in listOfFiles: + content = Path(file).read_text(encoding="utf-8") + if flag == "-l": + print(f"{len(content.splitlines())} {file}") + elif flag == "-w": + print(f"{len(content.split())} {file}") + elif flag == "-c": + print(f"{len(content)} {file}") + else: + print(f"{len(content.splitlines())} {len(content.split())} {len(content)} {file}") + +argv = sys.argv[1:] +files = [arg for arg in argv if not arg.startswith("-")] + +if "-l" in argv: + countAll(files, "-l") +elif "-w" in argv: + countAll(files, "-w") +elif "-c" in argv: + countAll(files, "-c") +else: + countAll(files) \ No newline at end of file